【问题标题】:TimerTask is called repeatetly after time-jump forwardTimerTask 在时间跳转后被重复调用
【发布时间】:2016-05-27 07:56:08
【问题描述】:

我在我的安卓代码中添加了一个TimerTask

private class MyTimerTask extends TimerTask {

    @Override
    public void run() {
        //do some task...
    }
}

并按如下方式调用它:

myTimer = new Timer();
//set the rate as 1 min
myTimer.scheduleAtFixedRate(new MyTimerTask(), 0,
                    60*1000);

现在,如果我关闭自动时间更新(来自网络)并将日期设置为明天的日期,则计时器任务每 5 毫秒开始运行一次。

为此,我不知道为什么会发生这种情况,我需要解决这个问题。我已经使用了处理程序,但我希望 TimerTask 能够正常运行。

请在这方面帮助我......

【问题讨论】:

  • 你为什么选择TimerTask,因为你已经有基于Handler的东西在工作?

标签: android timertask


【解决方案1】:

由于您使用scheduleAtFixedRate 而不是schedule,它会尝试赶上最后一天的“错过”处决。

来自API documentation

对于固定速率执行,任务的每次连续运行的开始时间都会被安排,而不考虑上一次运行发生的时间。如果延迟阻止计时器按时启动任务,这可能会导致一系列聚集运行(一个接一个地立即启动)。

【讨论】:

  • 那么如果我使用 schedule() 而不是 scheduleAtFixedRate() 就可以解决问题了吧?
  • 我怀疑,是的。如果这适合您的需要,请查看 JavaDoc。
猜你喜欢
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 2013-01-07
相关资源
最近更新 更多