Android新執行緒中更新主執行緒UI中的View方法彙總

孫群發表於2015-08-05

Android中的View都不是執行緒安全的,所以如果在某一個新執行緒中直接更新主執行緒中的UI控制元件時就會報如下錯誤:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

錯誤的意思是隻有建立View的原始執行緒才能更新View。

為了解決在另一個執行緒中更新UI控制元件的問題,我們可以使用如下幾種解決方案:
1. 自己寫Handler解決,參見《Android中Handler的使用》
2. 使用Activity#runOnUiThread(Runnable)方法,該方法接收一個Runnable物件作為引數,我們需要在該Runnalble的run方法中更新View,該方法內部也使用了Handler。
3. 使用View中的postXXX等方法:
View#post(Runnable)
View#postDelayed(Runnable, long)
View#postDelayed(Runnable action, long delayMillis)
這幾個方法也是接收Runnable物件作為引數,也是在該Runnable的run方法中更新View,這幾個方法內部也是用Handler實現的。

相關文章