Android 子线程更新UI 异常

Posted acesui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 子线程更新UI 异常相关的知识,希望对你有一定的参考价值。

众所周知,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,则会抛出异常。

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

以上是关于Android 子线程更新UI 异常的主要内容,如果未能解决你的问题,请参考以下文章

ios开发在子线程更新ui会怎样

子线程是否可以更新UI-Android

Android 在子线程中更新UI的几种方法示例

Android 子线程更新UI那些事儿

在多线程中,子线程更新主线程ui都有哪些方法及注意点

Android开发——实现子线程更新UI