Подтвердить что ты не робот

Заменить таймер в 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);
}
4b9b3361

Ответ 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 Удаляет все отмененные задачи из очереди задач. Если других заданий нет, тогда после этого вызова они могут быть собраны в мусор.

Возвращает количество отмененных задач, которые были удалены из очереди задач.