在我的Android应用程序中,我运行一个计时器并在其他一些事件上取消它:
class MyTimerTask extends TimerTask {
override boolean cancel() {
...
}
override void run() {
...
}
}
...
Timer t = new Timer();
t.schedule(new MyTimerTask(),...)
...
t.cancel();
我希望t.cancel()
能够自动调用MyTimerTask
的{{1}}方法。但是从不调用该方法。
我想知道这两种方法之间究竟有什么不同,以及为什么不会自动调用第二种方法。
答案 0 :(得分:7)
我认为您打算在cancel()
MyTimerTask
阅读此方法的文档...
http://developer.android.com/reference/java/util/TimerTask.html
public boolean cancel()
取消TimerTask并将其从Timer的队列中删除。通常,如果调用没有阻止TimerTask至少运行一次,则返回false。后续调用无效。
http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html#cancel
public void cancel()
终止此计时器,丢弃当前计划的任何任务。不干扰当前正在执行的任务(如果存在)。一旦计时器终止,它的执行线程就会正常终止,并且不再安排任何任务。
请注意,在此计时器调用的计时器任务的run方法中调用此方法绝对可以保证正在进行的任务执行是此计时器将执行的最后一次任务执行。
这种方法可以重复调用;第二次和后续的通话都没有效果。
在计时器上调用cancel()
会停止它并删除所有排队的任务。但是没有承诺在这些任务上调用cancel()
。此外,鉴于其中只有一项任务可以在任何时刻运行,这是否有意义?