Android中为什么可以在非UI线程里更新UI组件?

说好的不能在非UI线程里更新UI组件呢?其实非UI线程是可以刷新UI的,前提是它要拥有自己的ViewRoot,ViewRoot是在onResume()里addview()创建的,所以是在 onResume()检查是否为UI线程,一般在onCreate()中通过子线程可以更新UI,但是要保证更新ui的时间很短,因为activity的生命周期函数为onCreate()->onStart()->onResume(),所以在onResume中检查是否为ui线程时,更新ui的操作已经在onCreate中进行了,但是若更新UI的过程时间太长的话,就会马上被onResume检查到,从而报错。毕竟从onCreate到onResume的时间很短。但官方不建议这样做,因为 Android UI操作并不是线程安全的。

推荐阅读更多精彩内容