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

2022-09-04 22:08:56

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

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

       override void run() {
         ...
       }
  }

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

我期望自动调用 的方法。但该方法从未被调用。t.cancel()MyTimerTaskcancel()

我想知道这两种方法之间到底有什么区别,以及为什么第二种方法不会自动调用。


答案 1

我想你的意思是调用你的实例cancel()MyTimerTask

阅读此方法的文档...


http://developer.android.com/reference/java/util/TimerTask.html

公共布尔取消 ()

取消计时器任务并将其从计时器的队列中删除。通常,如果调用未阻止 TimerTask 至少运行一次,则返回 false。后续调用不起作用。


http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html#cancel

public void cancel()

终止此计时器,放弃任何当前计划的任务。不干扰当前正在执行的任务(如果存在)。计时器终止后,其执行线程将正常终止,并且不能在其上计划更多任务。

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

这种方法可以反复调用;第二次和后续调用不起作用。


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


答案 2