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)
为了确保在我再次运行循环时不会触发计划任务,我需要取消计划过时的任务(如果我在超时之前结束循环),以便新计时器将在新循环开始时再次启动(而不是在循环执行的第二次之间完成第一个循环后触发的旧的一个)
如何才能取消计划未被触发的任何计划任务以避免此计划任务混淆?
非常感谢!
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)