Handler 与 runOnUiThread 之间有什么区别?
What is the difference between Handler vs runOnUiThread?
我遇到了 runOnUiThread
和 Handlers
,但对我来说,它们在哪些事实上完全不同,这似乎仍然是一个疑问。
更新 UI 的最佳方式是什么?我应该使用 runOnUiThread
还是 Handler
?
已经完成 link。仍然无法证明差异的合理性。
提前致谢
处理程序是实现事件队列的好方法。它不必在主线程上 运行 ,您可以设置自己的循环程序。 RunOnUiThread 基本上是一个快捷方式,因此您实际上没有启动处理程序等。
运行OnUiThread 是一种使用主 ui 处理程序的方法,因此它们基本上是相同的。唯一的区别是,如果你在 ui 处理程序中调用它,你只是 运行 它而不是 post 它。
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
处理程序在其中声明它自己。或者您也可以手动设置循环器。
如果你想post多次向主线程发送数据,处理程序特别有用。
runOnUiThread 是 Activity 的方法。所以当你需要更新UI线程时,你必须按照下面的方式编写代码。
runOnUiThread(new Runnable() {
@Override
public void run() {
// update the ui
}
});
所以没有复用性。
例如您想更新文件下载的状态。你应该多次写上面的方法。
但是使用处理程序对象更新 UI 多次使用相同的处理程序对象。
我遇到了 runOnUiThread
和 Handlers
,但对我来说,它们在哪些事实上完全不同,这似乎仍然是一个疑问。
更新 UI 的最佳方式是什么?我应该使用 runOnUiThread
还是 Handler
?
已经完成 link。仍然无法证明差异的合理性。
提前致谢
处理程序是实现事件队列的好方法。它不必在主线程上 运行 ,您可以设置自己的循环程序。 RunOnUiThread 基本上是一个快捷方式,因此您实际上没有启动处理程序等。
运行OnUiThread 是一种使用主 ui 处理程序的方法,因此它们基本上是相同的。唯一的区别是,如果你在 ui 处理程序中调用它,你只是 运行 它而不是 post 它。
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
处理程序在其中声明它自己。或者您也可以手动设置循环器。
如果你想post多次向主线程发送数据,处理程序特别有用。
runOnUiThread 是 Activity 的方法。所以当你需要更新UI线程时,你必须按照下面的方式编写代码。
runOnUiThread(new Runnable() {
@Override
public void run() {
// update the ui
}
});
所以没有复用性。
例如您想更新文件下载的状态。你应该多次写上面的方法。
但是使用处理程序对象更新 UI 多次使用相同的处理程序对象。