【问题标题】:What is the difference between Handler vs runOnUiThread?Handler 与 runOnUiThread 有什么区别?
【发布时间】:2016-09-07 10:20:22
【问题描述】:

runOnUiThreadHandlers 我都遇到过,但对我来说,他们似乎仍然怀疑它们在哪些事实上完全不同。

更新 UI 的最佳方式是什么?我应该使用runOnUiThread 还是Handler

已经通过link。仍然无法证明差异是合理的。

提前谢谢你

【问题讨论】:

    标签: android android-asynctask android-handler android-runonuithread


    【解决方案1】:

    runOnUiThread 是一种使用主 ui 处理程序的方法,因此它们基本上是相同的。唯一的区别是,如果您在 ui 处理程序中调用它,您只需运行它而不是发布它。

    public final void runOnUiThread(Runnable action) {
       if (Thread.currentThread() != mUiThread) {
          mHandler.post(action);
       } else {
          action.run();
       }
    }
    

    【讨论】:

      【解决方案2】:

      处理程序是实现事件队列的好方法。它不必在主线程上运行,您可以设置自己的looper。 RunOnUiThread 基本上是一个快捷方式,因此您实际上没有启动处理程序等。

      【讨论】:

      • 我知道这个,如果你知道请回答。
      • “除此之外”是什么意思?如果您需要使用处理程序,则需要为每个处理程序分配一个内存,并且您需要控制是否已经在您的 ui 处理程序中工作。该方法本身会为您做到这一点。
      【解决方案3】:

      处理程序在其中声明它的地方注册自己。或者您也可以手动设置弯针。

      如果您想将多次数据发布到主线程,处理程序特别有用。

      runOnUiThread 是 Activity 的方法。所以当你需要更新 UI Thread 时,你必须按如下方式编写代码。

             runOnUiThread(new Runnable() {
      
                      @Override
                      public void run() {
                          // update the ui
      
                      }
                  });
      

      所以没有可重用性。

      例如,您要更新文件下载的状态。你应该多次编写上述方法。

      但是使用 Handler 对象会使用同一个 Handler 对象多次更新 UI。

      【讨论】:

        猜你喜欢
        • 2020-06-18
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 2022-11-12
        • 2011-09-22
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        相关资源
        最近更新 更多