1. 程式人生 > >Android 子線程更新UI 異常

Android 子線程更新UI 異常

handle activit 實現 文本 don 重繪 run 不可 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 異常