POSTING模式下,非UI线程中发布消息,订阅函数更新UI
如果说POSTING模式下,发布方和订阅方在同一线程中执行。
那么在非UI中发布消息,如果订阅回调中并没有使用runOnUiThread来更新界面,理论上应该是界面不更新吧!为什么我的会更新呢?
12
收起
正在回答 回答被采纳积分+1
3回答
我有明珠一颗
2024-10-31 07:37:01
posting模式,哪个线程发送,那个线程就接收。非ui线程发布消息,订阅函数更新UI所在的线程也是非ui线程。
非ui线程在一定条件下也可以更新ui。
因为ViewRootImpl 的创建在 onResume 方法回调之后,在 onCreate 方法中创建了子线程并访问 UI,在那个时刻,ViewRootImpl 还没有创建,在子线程写了更新ui代码,虽然可能会触发 View#requestLayout 和 View#invalidate() ,但是由于 ViewRootImpl还未创建出来,因此 ViewRootImpl#checkThread 没有被调用到,也就是说,检测当前线程是否是创建的 UI 那个线程 的逻辑没有执行到,所以程序没有崩溃一样能跑起来。而之后修改了程序,让线程休眠了 300 毫秒后,程序就崩了。很明显 300 毫秒后 ViewRootImpl 已经创建了,可以执行 checkThread 方法检查当前线程。
关键词:ViewRootImpl checkThread
2.Android 网络操作与流行框架
- 参与学习 人
- 提交作业 220 份
- 解答问题 1800 个
本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星