我使用调度程序来确保我的循环不会花太长时间,所以如果调度程序触发并结束循环,则退出循环。使用ScheduledExecutorService在Android中未计划预定任务
这是很简单的:
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
}
为了确保当我再次运行循环,我需要预定任务不火去计划过时的任务(如果我在超时之前结束循环),以便新计时器将在新循环的开始处重新开始(而不是在第一次循环在第二次之间完成之后开始的旧计时器)循环执行)
如何取消调度尚未解雇的计划任务以避免此计划任务混淆?
非常感谢!
超级 - 非常感谢。顺便说一句,如果所有这一切都在一个方法中,并且完整的方法在1分钟后退出。计划任务是否仍然存在,或者自方法完成后会自动死亡?另外,如果我取消相同的日程安排不止一次,这会造成问题吗?或者如果它已被取消(或执行),我需要跟踪吗? – user387184 2012-03-09 01:24:37
顺便说一句,我刚退出应用程序,调试器不断打印 - 它看起来不像调试器输出的积压。所以即使我按下“返回”直到应用程序退出,该应用程序仍继续运行?奇怪,不是吗? – user387184 2012-03-09 01:35:14
@ user387184 1.计划任务不会自动终止。使用ScheduledExecutorService.shutdownNow()来终止所有正在运行和等待的任务。 2.检查cancel()方法API:_Attempts 3.取消执行此任务。如果任务已经完成,已经被取消或者因其他原因而无法取消,则此尝试将失败。3.检查API,还有许多其他有用的API,从ScheduledFuture类getDelay(),isCancelled( )等等 – yorkw 2012-03-09 01:35:44