在我调用 timer.cancel() 方法后,TimerTask 又运行了一次

TimerTask runs one more time after I call timer.cancel() method

TimerTask 在我调用 timer.cancel() 方法后又运行了一次。 我不需要在调用 stopBusTimer() 方法后执行 TimerMethod。

有人可以解释为什么会这样吗?

busTimer = new Timer();
    busTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            TimerMethod(mSelectedRoute);
        }
    }, 0, Consts.BUS_TIMER_INTERVAL);


 private void stopBusTimer() {
    if (busTimer != null) {
        busTimer.cancel();
        busTimer.purge();     
        busTimer = null;
        Log.v(LOG_TAG, "stop BusTimer");
    }
}

cancel 方法将停止所有后续执行,但不会停止当前执行。如果你的方法执行时间比较长,那么有可能你调用的时候cancel,方法已经开始执行了

确保该方法不执行的最佳方法是从 run() 函数本身内部调用 cancel