在android中重新计划定时器

我怎样才能重新安排一个计时器。 我试图取消定时器/时间任务,并使用一种方法重新安排它。 但它显示了一个异常错误:

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);
}

如果你看到Timer.cancel()上的文档,你会看到:

“取消定时器和所有定时任务,如果有一个当前正在运行的任务,它不会受到影响,这个定时器上没有更多的任务可以被调度,随后的调用什么也不做。

重新计划时,您需要初始化新的Timer:

编辑:

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
  }
}

事实上,如果你看看取消方法javadoc,你可以看到以下内容:

不干扰当前正在执行的任务(如果存在)。

这会告诉计时器“好吧,现在不再有任务了,但你可以完成你正在做的任务”。 我想你还需要取消TimerTask。


@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);
}
链接地址: http://www.djcxy.com/p/12999.html

上一篇: Reschedule timer in android

下一篇: Android timer? How