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

Zha*_*kov 2 java timer timertask

在我调用 timer.cancel() 方法后,TimerTask 再运行一次。在调用 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

evi*_*uin 5

cancel方法将停止所有后续执行,但不会停止当前执行。如果您的方法执行需要很长时间,那么在您调用时cancel,该方法可能已经开始执行。

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