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

use*_*184 1 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);
}
Run Code Online (Sandbox Code Playgroud)

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

startSchedulerForUSBMessageTimeout();
while (!done && !timeoutForLoopReached) {
  ...do the loop stuff
}
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢!

yor*_*rkw 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);
... ...
Run Code Online (Sandbox Code Playgroud)