Reschedule timer in android
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);}