35

有没有区别

new Handler.post(Runnable r);

activity.runOnUiThread(Runnable r)
4

3 回答 3

19

来自官方处理程序文档

处理程序

Handler有两个主要用途:

(1) 安排消息和可运行文件作为未来某个时间点执行。

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

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

runOnUiThread

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

于 2011-09-17T06:21:47.903 回答
7

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

于 2011-09-17T07:15:17.740 回答
1

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

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

Activity.runOnUIThread(Runnable)始终在活动的 UIThread 上运行给定的可运行对象。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 代码在这里

于 2017-12-18T10:32:19.333 回答