Android:活动等到布尔条件

时间:2018-09-08 07:03:02

标签: java android

鉴于布尔条件isCondition将由异步任务更新,我该如何使Android Activity在此条件下等待而不阻塞执行?

在普通的Java中,在循环内使用Thread.sleep()可以很好地工作,但是我不确定在Android中使用它的安全性。

更新isCondition变量的异步任务在一个外部库中,该库从我的控件中抽象出来。我不希望这种无休止的民意调查阻止或减慢其他任务的执行速度,或占用过多的处理时间,而是将执行释放给可能需要运行的其他线程。

(我正在使用API​​ 25)

3 个答案:

答案 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();
}