Reschedule timer in android

扶醉桌前 提交于 2019-11-28 06:15:42

If you see the documentation on Timer.cancel() you'll see this:

"Cancels the Timer and all scheduled tasks. If there is a currently running task it is not affected. No more tasks may be scheduled on this Timer. Subsequent calls do nothing."

You'll need to initialize a new Timer when you are rescheduling:

EDIT:

public void reScheduleTimer(int duration) {
  timer = new Timer("alertTimer",true);
  timerTask = new MyTimerTask();
  timer.schedule(timerTask, 1000L, duration * 1000L);
}

private class MyTimerTask extends TimerTask {
  @Override
  public void run() {
    // Do stuff
  }
}

In fact, if you look in the cancel method javadoc, you can see the following thing :

Does not interfere with a currently executing task (if it exists).

That tells the timer "ok, no more tasks now, but you can finish the one you're doing". I think you'll also need to cancel the TimerTask.

@Eric Nordvik answer is running fine.

One thing we can do is to cancel previous timer events execution

public void reScheduleTimer(int duration) {

    // Cancel previous timer first
    timer.cancel();

    timer = new Timer("alertTimer",true);
    timerTask = new MyTimerTask();
    timer.schedule(timerTask, 1000L, duration * 1000L);
}
Rox Teddy

Actually you can use purge() so you don't have to initialize a new Timer.

public int purge ()

Added in API level 1 Removes all canceled tasks from the task queue. If there are no other references on the tasks, then after this call they are free to be garbage collected.

Returns the number of canceled tasks that were removed from the task queue.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!