美文网首页
关于子线程更新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那些事儿

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