android计时器问题

max*_*sap 3 android

您好我正在构建一个应用程序,它将在固定的时间段(例如每30分钟)执行一段代码.我希望那个时期是严格的,我的意思是我希望保证这段时间是30分钟而不是28分钟,或者只要操作系统执行它.

我有一个Timer对象,并按如下方式使用它:

timer=new Timer(); timer.scheduleAtFixedRate(new GetLastLocation(), 0, this.getInterval()); 其中GetLastLocation是扩展TimerTask的处理程序类.这工作正常,但我希望能够更改间隔,我目前正在做的是使用timer.scheduleAtFixedRate两次并更改interval参数让我们说一个newInterval但我认为这只是有两个定时器执行每个间隔现在,新的Interval,我是对的吗?

我也尝试取消定时器,然后使用方法scheduleAtFixedRate(),但这会引发文档中所述的异常.

我该怎么做才能解决这个问题?关于maxsap

bhu*_*ups 5

您无法安排已取消或安排的计时器.您需要为此创建一个新计时器.

Timer timer;
synchronized void setupTimer(long duration){
  if(timer != null) {
    timer.cancel();
    timer = null;
  }
  timer = new Timer();
  timer.scheduleAtFixedRate(new GetLastLocation(), 0, duration);
}
Run Code Online (Sandbox Code Playgroud)现在,只要您想更改计时器的持续时间,就可以调用setupTimer.
PS:在固定速率执行中,每次执行都是相对于初始执行的预定执行时间进行调度的.如果由于任何原因(例如垃圾收集或其他后台活动)延迟执行,则会快速连续执行两次或更多次执行以"赶上".从长远来看,执行的频率将恰好是指定时间段的倒数(假设Object.wait(long)下的系统时钟是准确的).