在调用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");
}
}
答案 0 :(得分:3)
cancel
方法将停止所有后续执行,但不会停止当前执行。你的方法执行需要很长时间,然后当你调用cancel
时,该方法已经开始执行了。
确保方法无法执行的最佳方法是从cancel
函数本身调用run()
。