在Android中使用计时器突破无限循环

时间:2016-05-04 23:20:10

标签: android multithreading

在我的一个项目中,我需要一个无限循环。要退出循环,唯一的条件是在其他某个线程上设置flag = true

flag = false;
While(true) {
   if (flag) break;
}

使用计时器突破循环的推荐方法是什么?比如,如果在接下来的500ms内,标志未设置为true,则强制退出循环。

1 个答案:

答案 0 :(得分:1)

您可以使用Handler.postDelayed()。请注意,我特意使用Looper.getMainLooper()作为Handler的主题,因为我假设您正在后台线程上执行无限循环。如果你在主线程上循环,这可能不是一个好主意,你将不得不更新Handler以使用不同线程的Looper

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        flag = true;
    }
}, 500);

另一种选择是创建一个新的Thread,在所需的时间内休眠,然后相应地设置标志。

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            Log.e("Timeout Thread", "Interrupted", e);
        }

        flag = true;
    }
}).start();