在Android的开发中,非UI线程不能操作UI线程中的控件,即UI是非线程安全的。
我在上一篇文章中这样说过:
它是非UI安全的,也就是说,不接受非UI线程的修改请求。当我们通过别的线程(非主线程或者说是非原始线程)来修改它的时候,
会抛出这个异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
CalledFromWrongThreadException 这个字面上都理解过来了,是说这个请求来自于错误的线程。
Only the original thread that created a view hierarchy can touch its views 只有最初创建视图层次结构的线程才可以接触到这些视图。
有些朋友可以不太明白这样的解释,今天我又写了一个这样的例子,让我们来看一下。
为了方便测试,在布局中我只有一个TextView,我通过非UI线程来修改它上面显示的值。
可能很多朋友都会正常完成修改TextView上面的值,所以对这个非UI线程来修改UI线程抱有怀疑和不解,因为我们明明是通过一个非UI的线程来修改成功的啊。
这里涉及到一个多线程的关系。我们知道,一个进程有了两条或两条以上的线程我们就可以叫它多线程了,它是多个线程可以同时工作,我来举个例子,
我到食堂里吃饭,师傅尽职地在窗口打菜,这就是两个线程,然后我点了一份TextView,里面装着Modify。最后我拿到这份TextView,回到座位上把它给吃了。
这个例子一切正常,所以什么异常都没有,然后第二天我又去了这个食堂。这天不知是我去得早了,还是这个师傅动作有些慢了。
我到食堂里吃饭,师傅一边XXX一边在炒菜,我惊呆了。然后他把炒好的TextView端上来,我抛出一个恶心反胃的异常,逃走了再也没有再来过这家食堂。
这两个例子,一个报错了一个没有,其实就在于我到食堂的时间,师傅是否已经做好了菜,就像上面的例子,UI线程和MyThead线程几乎是同时执行,
但后者的工作量太少了,更改了TextView上面的字就完成了,这里UI线程把这个UI展示出来,一切都很正常。但要是我们让MyThead在run的时候先睡眠几秒钟呢?
或者是弄一个按钮,点击按钮后MyThead才开始?这样都是在UI线程加载完成后才通过非UI线程对它进行修改的,一定会报错!
这就是多线程编程,有时候你运行若干次,结果正确,并不表明你的逻辑就是对的。我们一定要遵循代码的规范,保持清晰的思维。
再举一个规范的例子:
myThread是服务生,在UI线程(食堂)中有一个myHandler(厨师),我告诉服务生我点的菜,服务生就开始run,然后send一个Message给厨师myHandler,
myHandler收到消息开始做菜的动作,最后UI线程展示这道做好的菜。
PS:没看到那些工作间都写着吗,非工作人员禁止入内!!!
分享到:
相关推荐
android中非空验证框架validation,该项目是一个用来对输入的数据格式进行验证的。项目中含有一个简单的demo,可以通过这个demo学习validation的使用
中非商贸资讯爬虫任务管理平台操作手册.docx
简介:秘密堕胎仍然是包括中非共和国在内的发展中国家的主要健康问题。 在中非共和国班吉的主要妇产医院,2000年进行的一项研究表明,秘密堕胎(CAs)占该服务记录的所有堕胎的43.4%。 我们研究的目的是评估过去4年...
我们描述了中非共和国班吉(HIV)接受HIV / AIDS联合抗逆转录病毒疗法(cART)的患者的病毒学概况。 方法:在这项前瞻性队列研究中,对在班吉接受抗逆转录病毒治疗(cART)至少12个月的患者而言,在4月4日至11月...
非结构网格中非牛顿流体在偏心圆环管中数值传热计算,马倩,张敏,在非结构化网格中,用基元中心有限容积法进行非牛顿流体在偏心圆环管中的数值传热计算。在简单充分发展层流和不同的边界条件下,
中非贸易共享电商发展红利.pdf
2021年中非电子商务报告
主要介绍了详解MySQL 表中非主键列溢出情况监控,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2021年中非电子商务报告(英).pdf
中非跨境电商发展面临的障碍分析与对策探讨.pdf
Altium中非可视范围物件挪动到可视范围教程,是FLV格式的视频教程,讲解的很详细,如果打不开换个播放器试试,用PotPlayer播放器是可以正常打开的
新一代GPS标准中非理想表面模型的建模方法.pdf
在本文中,我们提议研究在RHIC能量下p↑p和p↑A碰撞中非弹性J /Ψ光产生中的横向单自旋不对称性。 首先,此过程将探测胶子Sivers功能。 我们预测较大的横截面值,这表明从原理上讲,其实验分析是可行的。 提出了单...
我们根据Malmendier和Morrison的最新观察结果,研究了椭圆校正中量子校正对椭圆形纤维异质压缩的影响。 我们已经表明,对于最简单的非平凡的椭圆形纤维化而言,其效果是... 在此过程中,我们解决了文献中的各种难题。
直角坐标系中非齐次热传导问题简单分解的精确解与数值解,张钧波,John C. Chai,在直角坐标系中,对非齐次热传导问题进行简单分解,以求得其精确解。与此同时,采用有限容积方法,在结构化网格中进行数值计算,
政治传播中非语言符号在编解码过程中的非同步性变化.pdf
excel用数组公式获取一列中非空(非零)值.docx
中非 智能电子警察系统doc,中非 智能电子警察系统
在两个装有乙二胺四乙酸的试管中采集血样以定量RNA HIV-1,CD4淋巴细胞和血球计数,并在干燥的试管中采集另一份样品以测量肌酐和转氨酶。 结果:总人口包括1748名患者,平均年龄为38.7岁(±14.3;中位数为41岁;...
目前的执行是出于中非共和国洛巴耶地区棕榈油开采过程中的技术效率。 本研究中使用的主要数据是通过结构良好的调查表收集的,该调查表由研究区域内150个随机选择的油棕加工者管理。 描述性统计,分析和随机前沿生产...