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 子类化并提供一个用于从任何线程设置文本的同步方法。
几件事:
如果您的 UI 线程很忙,您需要等待标题更新,您需要 re-think 您的应用程序设计找不到出路Q.
从 AsynTask 中,要在 UI 线程中获取要 运行 的内容,请使用 publishProgress
HTH
我在 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 子类化并提供一个用于从任何线程设置文本的同步方法。
几件事:
如果您的 UI 线程很忙,您需要等待标题更新,您需要 re-think 您的应用程序设计找不到出路Q.
从 AsynTask 中,要在 UI 线程中获取要 运行 的内容,请使用 publishProgress
HTH