Заменить таймер в android
Как я могу перепланировать таймер. Я попытался отменить таймер /timertask и снова запланировать его с помощью метода. Но он показывает ошибку исключения:
Exception errorjava.lang.IllegalStateException: TimerTask is scheduled already
Код, который я использовал:
private Timer timer = new Timer("alertTimer",true);
public void reScheduleTimer(int duration) {
timer.cancel();
timer.schedule(timerTask, 1000L, duration * 1000L);
}
Ответы
Ответ 1
Если вы видите документацию по Timer.cancel(), вы увидите следующее:
"Отменяет таймер и все запланированные задачи.Если есть текущая работа, это не влияет. В этом таймере не может быть запланировано больше задач. Последующие вызовы ничего не делают."
Вам нужно будет инициализировать новый таймер при перепланировке:
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
}
}
Ответ 2
Фактически, если вы посмотрите в метод отмены javadoc, вы можете увидеть следующее:
Не мешает выполнению текущей задачи (если она существует).
Это говорит таймеру "ОК, теперь больше задач, но вы можете закончить то, что вы делаете". Я думаю, вам также понадобится отменить TimerTask.
Ответ 3
Ответ @Eric Nordvik работает нормально.
Одна вещь, которую мы можем сделать, - отменить выполнение предыдущих событий таймера
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);
}
Ответ 4
На самом деле вы можете использовать purge()
, поэтому вам не нужно инициализировать новый Timer
.
public int purge ()
Добавлен в API уровня 1 Удаляет все отмененные задачи из очереди задач. Если других заданий нет, тогда после этого вызова они могут быть собраны в мусор.
Возвращает количество отмененных задач, которые были удалены из очереди задач.