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

时间:2016-07-29 06:23:19

标签: 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");
    }
}

1 个答案:

答案 0 :(得分:3)

cancel方法将停止所有后续执行,但不会停止当前执行。你的方法执行需要很长时间,然后当你调用cancel时,该方法已经开始执行了。

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