Java - Timer.cancel()v/s TimerTask.cancel()

Pet*_*ter 11 java android timer timertask

在我的Android应用程序中,我运行一个计时器并在其他一些事件上取消它:

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

       override void run() {
         ...
       }
  }

  ...
  Timer t = new Timer();
  t.schedule(new MyTimerTask(),...)
  ...
  t.cancel();
Run Code Online (Sandbox Code Playgroud)

我期待t.cancel()能够自动调用MyTimerTaskcancel()方法.但是从不调用该方法.

我想知道这两种方法之间究竟有什么不同,以及为什么第二种方法不能自动调用.

use*_*967 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 Code Online (Sandbox Code Playgroud)

终止此计时器,丢弃当前计划的任何任务.不干扰当前正在执行的任务(如果存在).一旦计时器终止,其执行线程将正常终止,并且不再可以在其上安排任何任务.

请注意,在此计时器调用的计时器任务的run方法中调用此方法绝对可以保证正在进行的任务执行是此计时器将执行的最后一次任务执行.

可以重复调用该方法; 第二次和后续的通话都没有效果.


调用cancel()计时器会停止它并删除所有排队的任务.但没有承诺要求cancel()这些任务.此外,鉴于其中只有一项任务可以在任何时刻运行,这是否有意义?