我都遇到过Handlers http://developer.android.com/reference/android/os/Handler.html and 在UiThread上运行 http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29概念。但对我来说,它们到底在哪些事实上存在差异似乎仍然是一个疑问。
它们都旨在从后台线程执行 UI 操作。但我们在选择这两种方法时要考虑哪些因素呢?
例如考虑一个Runnable
Thread
它在后台执行 Web 服务,现在我想更新 UI。
更新用户界面的最佳方式是什么?我应该去吗Handler
or runOnUiThread
?
我仍然知道我可以使用AsyncTask
并利用onPostExecute
。但我只是想知道其中的区别。
Activity.runOnUiThread() http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29是更通用的特殊情况Handlers http://developer.android.com/reference/android/os/Handler.html. With Handler
您可以在自己的线程中创建自己的事件查询。使用Handlers
实例化为默认构造函数 http://developer.android.com/reference/android/os/Handler.html#Handler%28%29 doesn't mean "代码将在 UI 线程上运行” 一般来说。默认情况下,处理程序绑定到Thread
它们是从中实例化的。
创建一个Handler
保证绑定到 UI(主)线程,您应该创建一个Handler
对象绑定到主循环器像这样:
Handler mHandler = new Handler(Looper.getMainLooper());
此外,如果您检查runOnUiThread()
方法,它正在使用Handler
做这些事情:
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
从上面的代码片段可以看出,Runnable action
如果出现以下情况,将立即执行runOnUiThread()
从 UI 线程调用。否则,它将发布到Handler
,它将在稍后的某个时刻执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)