美文网首页
关于子线程更新UI那些事儿

关于子线程更新UI那些事儿

作者: 子沐_ | 来源:发表于2017-05-11 10:48 被阅读0次

我们都知道子线程不能更新UI,但是测试的时候发现,onCreate方法中子线程是可以更新UI的,onResume就不行

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5971)

1.异常发生在ViewRootImpl的checkThread

2.onCreate过程中主要是通过setContentView方法在PhoneWindow中创建DecorView,DecorView包含我们创建的xml布局,并没有ViewRootImpl相关类

3.ViewRootImpl创建发生在onResume,随后将DecorView加入ViewRootImpl,这是更新UI会触发ViewRootImpl的checkThread方法

总结

onCreate之所以可以子线程更新UI是因为此时我们的根视图没有加入ViewRootImpl,所以就没有检查线程的操作

onResume方法之后,因为根视图已经加入ViewRootImpl,所以会触发checkThread操作,所以不能进行子线程UI更新

所以,子线程不能更新UI的原因在于子线程中不持有ViewRootImpl的对象,所以无法更新UI

相关文章

  • 关于子线程更新UI那些事儿

    我们都知道子线程不能更新UI,但是测试的时候发现,onCreate方法中子线程是可以更新UI的,onResume就...

  • 线程通讯详解

    关于子线程能否更新UI的思考线程通讯详解线程池-多线程的高效使用姿势 上文我们说到了关于子线程中能否更新UI的问题...

  • 如何做到在子线程更新 UI?

    一般来讲,子线程是不能更新 UI 的,如果在子线程更新 UI,会报错。 但在某种情况下直接开启线程更新 UI 是不...

  • Android在线程中更新UI和在协程中更新UI

    1、在子线程里面更新UI 我们都知道Android只能在主线程里面对UI更新,所以谷歌提供了很多在子线程里面更新U...

  • 子线程更新UI的方法

    子线程中不能直接更新UI,如果直接更新的话会发生崩溃所以要在主线程中更新UI,总计三种回到主线程更新UI的方式 1...

  • 非UI线程是否可以更新UI

    可以,在onCreate函数子线程是可以更新UI的因为通常的子线程更新UI的报错是ViewRootImpl类的ch...

  • 【Android】AsyncTask源码分析

    在Android中ui是非线程安全的,更新ui只能在主线程操作,所以我们平时如果遇到子线程更新UI的情况,必须要切...

  • Android多线程

    1.沿用java的子线程创建 2.在子线程中不能更新UI,那么在Android中更新UI的方法 runOnUiTh...

  • Android Handler

    Hander机制,将子线程需要更新UI操作信息传递到主线程,从而实现UI更新。 基本写法: ``` Handler...

  • Android 关于子线程更新UI的那些事

    一 相信大家都有听过,子线程更新UI的操作。但这种说法,不是很明确。有些人说子线程更新UI会挂,而有些人说子线程可...

网友评论

      本文标题:关于子线程更新UI那些事儿

      本文链接:https://www.haomeiwen.com/subject/mgwcettx.html