之间有区别吗?
new Handler.post(Runnable r);
和
activity.runOnUiThread(Runnable r)
答案 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。