概述
1. 为啥android子线程不可更新UI?
我们可以想象下多线程更新UI会出现什么场景。比如多线程对一个view同时设置位置,那么到界面的显示上用户可能就会看到这个view在界面上上下左右的闪现,晃眼啊。
2. 什么情况下子线程可以更新UI?
我们先看下子线程更新UI的报错
这是在子线程中更新TextView的内容,可以看出报错是在调用view的requestLayout之后发生的,说明可能是控件位置变化后导致检查线程问题,那布局未变化的情况下能否更新UI呢?
答案是可以的。
为了不改变控件的位置,我们将TextView的宽度设置为match_parent,这时如果在子线程中修改TextView的内容,只要内容不会导致换行是可以修改成功的,因此子线程中修改UI,只要不会触发view的requestLayout方法是可以修改UI的。
还一种情况下也可以修改UI,就是在Activity的onResume之前进行修改。因为检查线程方法是通过ViewRootImpl实现的,而ViewRootImpl在onResume时才创建。
参考:[https://www.cnblogs.com/billshen/p/13328680.html]
子线程中可以使用补间动画,因为补间动画并没有实际改变控件位置。
UI还涉及到dialog和toast,而子线程想要使用dialog和toast,需要启用looper,因为dialog和toast的需要通过handler才能正常运行,大家可通过查看源码了解一下。
3. 子线程更新UI的几种方式。
runonuithread
view.post
handler
最后
以上就是心灵美蜜蜂为你收集整理的android 子线程更新UI的全部内容,希望文章能够帮你解决android 子线程更新UI所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复