使用ScheduledExecutorService在Android中取消安排计划任务

时间:2012-03-09 01:06:46

标签: android scheduled-tasks

我使用调度程序来确保我的循环不会花费太长时间,所以如果调度程序触发并结束循环,我会退出循环。

这很简单:

public void startSchedulerForTimeout() {

    Log.i("x", "SCHEDULING TIMEOUT " );
    timeoutForLoopReached = false;
    scheduler.schedule(new Runnable() {
    public void run() {
        timeoutForLoopReached = true;
        Log.i("x", "SET TIMEOUT FLAG ");
        }
     }, 10, TimeUnit.SECONDS);
}

所以在我的代码中我只写:

startSchedulerForUSBMessageTimeout();
while (!done && !timeoutForLoopReached) {
  ...do the loop stuff
}

为了确保在我再次运行循环时不会触发计划任务,我需要取消计划过时的任务(如果我在超时前结束循环),以便新计时器将在新的开始时再次启动循环(而不是在第一次循环完成后第二次循环执行之后的旧的触发)

如何才能取消计划未被触发的任何计划任务以避免此计划任务混淆?

非常感谢!

2 个答案:

答案 0 :(得分:5)

使用ScheduledFuture

ScheduledExecutorService scheduledTaskExecutor = Executors.newScheduledThreadPool(1);
Runnable longRunningTask = new Runnable();

// schedule long running task in 2 minutes:
ScheduledFuture scheduleFuture = scheduledTaskExecutor.schedule(longRunningTask, 2, TimeUnit.MINUTES);

... ...
// At some point in the future, if you want to cancel scheduled task:
scheduleFuture.cancel(true);
... ...

答案 1 :(得分:1)

schedule的所有覆盖都会返回ScheduledFuture Future,其中{{1}}有cancel方法。