谁能告诉我使用之间是否有什么区别runOnUiThread()
versus Looper.getMainLooper().post()
在Android的UI线程上执行任务?
我唯一可以确定的是,由于 runOnUiThread 是一个非静态 Activity 方法,Looper.getMainLooper().post()
当您需要在看不到 Activity 的类中编写某些内容(例如接口)时,这会更方便。
我不是在寻找关于是否应该在 UI 线程上执行某事的讨论,我知道有些事情不能,很多事情不应该执行,但是,有些事情(例如启动 AsyncTask)必须执行来自 UI 线程。
从后台线程调用时,以下行为相同:
-
using Looper.getMainLooper()
Runnable task = getTask();
new Handler(Looper.getMainLooper()).post(task);
-
using Activity#runOnUiThread()
Runnable task = getTask();
runOnUiThread(task);
唯一的区别是当您从 UI 线程执行此操作时,因为
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
会检查当前Thread是否已经是UI线程然后直接执行。将其作为消息发布将延迟执行,直到您从当前 UI 线程方法返回。
还有第三种方法可以执行Runnable
在 UI 线程上,这将是View#post(Runnable) http://developer.android.com/reference/android/view/View.html#post%28java.lang.Runnable%29- 即使从 UI 线程调用,此消息也始终会发布消息。这很有用,因为这将确保View
在执行代码之前已经正确构建并具有布局。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)