Handler 与 runOnUiThread 之间有什么区别?

What is the difference between Handler vs runOnUiThread?

我遇到了 runOnUiThreadHandlers,但对我来说,它们在哪些事实上完全不同,这似乎仍然是一个疑问。

更新 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 多次使用相同的处理程序对象。