Android 立即 运行 在 ui 线程上

Android immediately run on ui thread

我在 Whosebug 上阅读了很多其他答案,但似乎找不到我的答案。

我的 class 中有一个侦听器,我在异步块中执行了一个很长的 运行ning 任务:

AsyncTask.execute(() -> {
   // long running task here
   // ...
   listener.updateTitle(newTitle);
});

获得数据后,我将其传回相关 class:

 @Override
 public void updateTitle(String newTitle) {
   getActivity().runOnUiThread(() -> title.setText(newTitle));
 }

现在根据我研究的在线呼叫 runOnUiThread(..) 将 运行nable 添加到需要在 ui 上 运行 的 queue 任务中。我的问题是更新标题比任何其他 ui 任务更重要 运行ning.

是否可以将这个任务添加到queue的前面,或者执行当前正在执行的任务,然后执行这个新任务并继续按之前的顺序执行任务?

当然可以:

new Handler(Looper.getMainLooper()).postAtFrontOfQueue(() -> title.setText(newTitle));

这可能不足以满足您的需求,因为无论如何都会延迟执行此操作。如果您需要更新下一帧的标题,您可能需要考虑将 TextView 子类化并提供一个用于从任何线程设置文本的同步方法。

几件事:

  1. 如果您的 UI 线程很忙,您需要等待标题更新,您需要 re-think 您的应用程序设计找不到出路Q.

  2. 从 AsynTask 中,要在 UI 线程中获取要 运行 的内容,请使用 publishProgress

HTH