有没有区别
new Handler.post(Runnable r);
和
activity.runOnUiThread(Runnable r)
来自官方处理程序文档
处理程序
Handler有两个主要用途:
(1) 安排消息和可运行文件作为未来某个时间点执行。
(2) 将要在与您自己的线程不同的线程上执行的操作排入队列。
简而言之,Handler是用来管理不同的Runnable。
runOnUiThread
它用于在 UI 线程上执行非 UI 操作,例如,如果要从 AsyncTask 的 doInBackground() 更新屏幕,则必须在 runOnUiThread() 中编写更新 UI 的代码部分。但这又会阻止用户界面。
runOnUiThread
基本上适合在AsyncTask
通话前显示进度对话框或进行一些 UI 操作。如果您想在线程执行过程中更新 UI,那么最好的方法是创建一个Handler
将更新您的 UI,并让线程继续运行,例如,在几秒钟后定期更新文本视图,比如说定时器功能。
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 代码在这里。