我使用Timer()是因为它的准确性,但它的工作方式与PostDelayed处理程序相同。它只调用一次。以下是计时器代码:
public void setWFT() {
WFT = new Timer();
WFT.schedule(new TimerTask() {
@Override
public void run() {
WFTTimerMethod();
}
}, 60000); // 60 seconds delay
}
private void WFTTimerMethod() {
this.runOnUiThread(Timer_Tick);
}
private Runnable Timer_Tick = new Runnable() {
public void run() {
// My commands here
}
};这只在计时器启动后的60秒后调用run()一次。有时,我必须取消计时器来更新延迟(替换"60000“值)。要再次启动计时器,我只需使用新的延迟值再次调用WFT()来重新创建计时器。
问题是,当我使用以下命令取消计时器时:
WFT.cancel();
WFT.purge();计时器不启动。run()没有在应该执行的时候执行。所以我的问题是,我应该使用cancel()和purge(),还是只使用cancel()?
谢谢
发布于 2013-04-17 21:52:55
purge()上的From the Java API
大多数程序将不需要调用此方法。它专为取消大量任务的极少数应用程序而设计。调用此方法以时间换取空间:该方法的运行时间可能与n +c log成比例,其中n是队列中的任务数,c是取消的任务数。
所以你只需要调用cancel()
发布于 2013-04-17 21:54:15
来自cancel()文档:
不能在此计时器上调度更多任务。
https://stackoverflow.com/questions/16061874
复制相似问题