博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 子线程更新UI 异常
阅读量:6818 次
发布时间:2019-06-26

本文共 571 字,大约阅读时间需要 1 分钟。

众所周知,Android是不可以在子线程中直接更新UI的,需要借助Handler或者View.post(Runnable runnable)或者runOnUIThread(Runnable runnable)将更新的代码切入到主线程中去实现UI更新。

我们来试一下,在Activity的 onCreate中直接在新线程中去更新一个TextView的文本,结果发现,WHAT?竟然没有抛出异常,更新也成功了?

这是因为在onCreate中尚未完成View的绘制,此时TextView中有个变量mLayout仍为null,setText时不执行重绘,没有运行到抛出线程异常的代码,但是相应的text却变化了。在Activity分发子View的Layout后,绘制的时变化后的text,故不抛出异常。其他View如ImageView也有类似现象出现。

如果在textview.getViewTreeObserver().addOnGlobalLayoutListener(OnGlobalLayoutListener listener)中添加监听绘制完毕的事件,然后再在子线程中更新UI,则会抛出异常。

归根结底,不能钻这个空子,不优美、不安全!

转载于:https://www.cnblogs.com/acesui/p/10153361.html

你可能感兴趣的文章
Serverlet
查看>>
pandas一些基本操作(DataFram和Series)_1
查看>>
【零基础学习iOS开发】【02-C语言】05-进制
查看>>
使用Webpack的代码分离实现Vue懒加载
查看>>
V for vendetta
查看>>
Android指南 - 样式和主题
查看>>
margin注意问题
查看>>
事物的回滚
查看>>
Xcode7 iOS9.0 的真机调试
查看>>
Constraint3:check约束 和 null
查看>>
Rocket - diplomacy - LazyModule实例:Buffer
查看>>
Fabric 1.0环境搭建
查看>>
c冒泡排序
查看>>
第十五篇、OC_同一个View实现两个手势响应
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Java软件架构设计慨论
查看>>
15-用户手册(GB8567——88)
查看>>
AS3效率优化:使用Vector数据类型
查看>>
JAVA 访问WebRoot下的目录文件
查看>>
【vue】vue +element prop用法
查看>>