我已经在我的android应用程序中实现了一个服务,该服务启动计时器(使用标准的java.util.Timer和java.util.TimerTask机制)以在预定义的时间间隔在后台进行一些处理.
public class BackgroundProcessingService extends Service {
private int interval;
private Timer timer = new Timer();
public void onCreate() {
super.onCreate();
startTimer();
}
@Override
public void onDestroy() {
timer.cancel();
super.onDestroy();
}
public int getInterval() {
return interval;
}
public void setInterval(int interval) {
this.interval = interval;
}
private void startTimer() {
timer.scheduleAtFixedRate( new TimerTask() {
public void run() {
// perform background processing
}
}, 0, getInterval());
; }
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
服务是由我的应用程序像这样启动/停止的.
backgroundProcessingService = new Intent(getApplicationContext(), BackgroundProcessingService .class);
startService(backgroundProcessingService);
只要电话处于活动状态(不发生屏幕超时),该服务就会正常运行,并且计时器将在定义的时间间隔内执行其工作.即使我退出了应用程序(使用“后退”按钮),计时器仍然保持活动状态.
但是,一旦电话进入超时状态,计时器任务将不再稳定运行.如果我将手机在超时状态下放置几个小时(晚上),我会发现在随机的情况下(有时间隔几个小时),计时器会启动.
同样,当电话再次启动时,所有排队的计时器运行都会突然执行一次,然后恢复到正常间隔.
即使在电话进入超时后,实现仍可正常运行的计时器的正确方法是什么.我应该使用PowerManager和WAKE_LOCKS(如此处所述http://code.google.com/android/reference/android/os/PowerManager.html),还是有另一种机制?
解决方法:
标签:timeout,timer,android,service
来源: https://codeday.me/bug/20191105/1997109.html