初了解Android的时候,就知道Android是不能在子线程更新UI的,不然程序会直接抛出异常,告诉你,别给我在自线程搞事情!

但是,这个是针对普通的view做的限制,而TextureView,Surface则可以在自线程更新UI,你可以在它的内部创建线程,然后使用
canvas在线程里进行绘制。

TextureView与SurfaceView的不同之处在于,textureView使用surfaceholder,是从当前页面的view中获取的,而SurfaceView则是
对当前View的置顶区域挖空,持有单独的surfaceHolder。在游戏开发或做视频播放功能时,由于界面需要保持刷新,所以他们都是基于
surfaceView或TextureView进行的。

Github上的一个项目,ScrollTextView,也是继承SurfaceView,在线程中不断的更改文字绘制的位置,实现的文字滚动。

好处当然很明显,在单独的线程中处理逻辑,不会受其他线程,其他View的影响。
坏处也有,页面切换的时候会闪;而且当两个页面都使用了该SurfaceView的时候,两个view对象对抢夺canvas的锁对象,造成应用ANR。

所以surfaceView和TextureView不能滥用,一般的功能需求是用不到这两个view的。

Android可以子线程更新UI?的更多相关文章

  1. Android通过子线程更新UI的几种方式

    一般情况下,UI的更新都少不了Handler,首先我们先了解一下Handler机制: Handler消息机制 定义 Message 线程间通信的数据单元,可通过message携带需要的数据创建对象:M ...

  2. android基础---->子线程更新UI

    和许多其他的GUI 库一样,Android 的UI 也是线程不安全的.也就是说,如果想要更新应用程序里的UI 元素,则必须在主线程中进行,否则就会出现异常.了解AsyncTask的用法,请参见我的博客 ...

  3. Android子线程更新UI的方法总结

    版权声明:本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=6121280 消息机制,对于Android开发者来说,应该是非常 ...

  4. [Android学习笔记]子线程更新UI线程方法之Handler

    关于此笔记 不讨论: 1.不讨论Handler实现细节 2.不讨论android线程派发细节 讨论: 子线程如何简单的使用Handler更新UI 问题: android开发时,如何在子线程更新UI? ...

  5. android子线程更新UI

    参考:https://www.cnblogs.com/joy99/p/6121280.html 子线程是不能直接更新UI的.Android实现View更新有两组方法,分别是invalidate和pos ...

  6. Android子线程更新UI成功

    android子线程更新UI成功 今天在写demo的时候,在子线程中更新UI,发现更新成功,记录一下. protected void onCreate(Bundle savedInstanceStat ...

  7. Android开发——实现子线程更新UI

    Android中线程按功能分的话,可以分为两个,一个是主线程(UI线程),其他的都是子线程 主线程不能执行那些耗时过长的代码或任务(执行耗时过长的代码会出现应用未响应的提示),所以都是使用子线程来执行 ...

  8. 子线程更新UI界面的2种方法

    一.一般我们都会在子线程完成一些耗时的操作. 1.Android中消息机制: 2.知识点: Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队, ...

  9. OkHttp3几个简单的例子和在子线程更新UI线程的方法

    okHttp用于android的http请求.据说很厉害,我们来一起尝尝鲜.但是使用okHttp也会有一些小坑,后面会讲到如何掉进坑里并爬出来. 首先需要了解一点,这里说的UI线程和主线程是一回事儿. ...

随机推荐

  1. centos 7 mount usb hard disk(ntfs format)

    1. yum install -y epel-release* 2. yum install -y ntfs-3g 3. 命令:fdisk -l (查看磁盘分区信息) [root@devserverg ...

  2. 探究CSS中border-top属性的使用

    上一节我们介绍了CSS top属性的用法,那么这节关于CSS border-top属性用法学习起来就会轻松一些,border-top 简写属性把上边框的所有属性设置到一个声明中. 本文向大家描述一下C ...

  3. treap Python实现

    # coding=utf-8 # treap(树堆)Python实现 import random def preorder_tree_walk(node): if node: print node.k ...

  4. vsphere使用笔记

    一,安装虚拟机,需要使用vsphere client上传镜像,提示错误:   vsphere client 上传文件:Failed to log into NFC Server   , 解决办法:用浏 ...

  5. bootstrap修改勾选样式

    小对勾需要引入awesome插件. css部分: .bella-checkbox{ position: relative;}/** 将初始的checkbox的样式改变 */.bella-checkbo ...

  6. leetcode944

    public class Solution { public int MinDeletionSize(string[] A) { ; ; j < A[].Length; j++) { ; i & ...

  7. 7. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    转自:http://www.kyjszj.com/htzq/79.html 1. if 语句 (简单的条件判断) 2. choose (when,otherwize) ,相当于java 语言中的 sw ...

  8. bootStrap的小知识

    代码模块 <code> 内联代码 <kbd> 用户输入 <pre>代码段 <var>数学字符 <samp>程序输出 表格 <thead ...

  9. FireFox 火狐主页被劫持

    火狐主页被劫持hao123,流氓 WIN7 ,firefox,任务栏,快速启动,右键 属性 target 应该是 "D:\Program Files (x86)\Mozilla Firefo ...

  10. 在spring引入log4j(非web项目)

    https://blog.csdn.net/u012578322/article/details/78012183 在spring中使用log4j 引入log4j软件包 配置log4j属性 加载log ...