在RecyClerview中更新10至15个项目时,Diffutils屏蔽UI


final Handler handler = new Handler();
    new Thread(new Runnable() {
      @Override
      public void run() {
        final DiffUtil.DiffResult diffResult =
          DiffUtil.calculateDiff(new DiffCb(oldItems, newItems));
        handler.post(new Runnable() {
          @Override
          public void run() {
            applyDiffResult(newItems, diffResult);
          }
        });
      }
    }).start();
  }

这就是我进行计算和更新列表的方式。但是,当我更新2,3个项目时,它的工作原理很完美。但是,当我更新20个项目时,它会阻止UI的Alomst 10秒。

这是因为根据处理程序的DOC,该任务在处理程序创建的任何线程上运行。在这种情况下,这是您的UI线程。

创建一个新处理程序时,它绑定到创建它的线程的线程/消息队列

您需要使用"处理程序"分配处理程序的处理程序,以进行操作。

初始化处理程序时,请这样做:

HandlerThread thread = new HandlerThread("newthread");
thread.start();
Handler handler = new Handler(thread.getLooper());

另外,请检查此链接以获取有关使用HandlerThread的更多信息和最佳实践。

相关内容

  • 没有找到相关文章

最新更新