Android 子線程更新UI 異常
阿新 • • 發佈:2018-12-21
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 異常