Handler.post(Runnable r)和Activity.runOnUiThread(Runnable r)之间的区别

时间:2011-09-17 06:16:02

标签: android handler ui-thread

之间有区别吗?
new Handler.post(Runnable r);

activity.runOnUiThread(Runnable r)

3 个答案:

答案 0 :(得分:19)

来自官方Handler文档

<强>处理程序

Handler有两个主要用途:

  

(1)安排消息和runnables作为某些点执行   未来。

     

(2)将要在不同的线程上执行的操作排入队列   你自己的。

简而言之,Handler用于管理不同的Runnable。

<强> runOnUiThread

  

它用于在UI线程上执行非UI操作,例如   如果你想从AsyncTask的doInBackground()更新屏幕   你必须编写更新内部UI的代码部分   runOnUiThread()。但同样会阻止用户界面。

答案 1 :(得分:7)

runOnUiThread基本上适合在AsyncTask调用之前显示进度对话框或进行一些UI操作。 如果要在线程执行过程中更新UI,那么最好的方法是创建一个Handler来更新UI,让线程继续运行,例如,在定期更新文本视图后几秒钟,说计时器功能。

答案 2 :(得分:1)

Handler附加到创建它的线程上。

handler.post(Runnable)可用于在Handler附加的线程上运行代码。

Activity.runOnUIThread(Runnable)始终在活动的UIThread上运行给定的runnable。 Internnaly它是通过一个处理程序Activity在这样构造时创建的:

final Handler mHandler = new Handler();

因此runonUiThrad代码如下所示:

public final void More ...runOnUiThread(Runnable action) {
    if (Thread.currentThread() != mUiThread) {
        mHandler.post(action);
    } else {
        action.run();
    }
}

正如您可以看到当前线程是否不是UI线程,它会在我们之前提到的成员处理程序上发布给定的runnable。 如果调用者已经在ui线程上,它只调用runnable。

Rad代码here