Android新线程中更新主线程UI中的View方法汇总

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实现的。

你可能感兴趣的:(Android)