我已经在StackOverflow上阅读了很多其他答案,似乎找不到我的答案。
我的课堂上有一个侦听器,我在异步块中执行了长时间运行的任务:
AsyncTask.execute(() -> {
// long running task here
// ...
listener.updateTitle(newTitle);
});
一旦我有了数据,就将其传递回相关的类:
@Override
public void updateTitle(String newTitle) {
getActivity().runOnUiThread(() -> title.setText(newTitle));
}
现在,根据我在线研究的内容,runOnUiThread(..)
将可运行对象添加到需要在ui上运行的任务队列中。我的问题是,更新标题比运行的其他任何ui任务都重要。
是否可以将此任务添加到队列的开头,或者执行当前正在执行的任务,然后执行此新任务并继续按先前的顺序执行任务?
答案 0 :(得分:2)
确定:
new Handler(Looper.getMainLooper()).postAtFrontOfQueue(() -> title.setText(newTitle));
这可能不足以满足您的需求,因为无论如何此操作都会有所延迟。如果需要更新下一帧的标题,则可能需要考虑将TextView子类化,并提供一种用于从任何线程设置文本的同步方法。
答案 1 :(得分:0)
几件事:
如果您的UI线程很忙,您需要等待标题更新,那么您需要重新考虑您的应用设计,找不到找到超越Q的方法。
要从AsynTask中获取要在UI线程中运行的内容,请使用publishProgress
HTH