鉴于布尔条件isCondition
将由异步任务更新,我该如何使Android Activity
在此条件下等待而不阻塞执行?
在普通的Java中,在循环内使用Thread.sleep()
可以很好地工作,但是我不确定在Android中使用它的安全性。
更新isCondition
变量的异步任务在一个外部库中,该库从我的控件中抽象出来。我不希望这种无休止的民意调查阻止或减慢其他任务的执行速度,或占用过多的处理时间,而是将执行释放给可能需要运行的其他线程。
(我正在使用API 25)
答案 0 :(得分:1)
暂停/休眠主UI线程不是一个好主意,因为它会停止所有UI交互处理,通常会触发“应用程序无响应”(ANR)对话框。
您可以实现AsyncTask
类,并在isCondition
方法中获取onPostExecute
的值,然后根据需要进行操作。 official doc gives a good example
修改
注意您的评论,您可以运行TimerTask来反复查询isCondition
的值。
答案 1 :(得分:0)
我们可以:
16*16 = 256
祝你好运
答案 2 :(得分:0)
如果我使用Thread或Handler + while(true)
,它将导致ui卡住,所以我使用以下代码,cancel()
很重要,它将阻止再次运行timertask
public static void waitUntil(final Activity ctx, final WaitUntil wu) {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
ctx.runOnUiThread(new Runnable() {
@Override
public void run() {
if (wu.cond()) {
wu.todo();
cancel();
}
}
});
}
}, 1000);
}
和WaitUntil界面
public interface WaitUntil {
boolean cond();
void todo();
}