Java - Timer.cancel() 和 TimerTask.cancel() 的区别

14

在我的安卓应用中,我启动了一个计时器并在其他事件发生时取消它:

  class MyTimerTask extends TimerTask {
       override boolean cancel() {
         ...
       }

       override void run() {
         ...
       }
  }

  ...
  Timer t = new Timer();
  t.schedule(new MyTimerTask(),...)
  ...
  t.cancel();

我原以为t.cancel()会自动调用MyTimerTaskcancel()方法,但是实际上这个方法从来没有被调用过。
我想知道这两种方法之间的区别是什么,以及为什么第二个方法不会自动调用。
1个回答

11

我想您可能是想在MyTimerTask实例上调用cancel()方法。

查看此方法的文档...


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()

终止此计时器,丢弃当前已安排的所有任务。不会影响当前正在执行的任务(如果存在)。一旦计时器已被终止,其执行线程将优雅地终止,并且不再可以在其上安排更多任务。

请注意,从此计时器调用的计时器任务的运行方法中调用此方法绝对保证正在进行的任务执行是此计时器将执行的最后一个任务执行。

此方法可以重复调用;第二次及以后的调用没有效果。


在计时器上调用cancel()将停止它并删除所有排队的任务。但没有承诺对这些任务调用cancel()。此外,考虑到只有其中1个任务可以在任何时刻运行,这种做法是否有意义?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接