自动化过程中会有一些长时间的任务,每隔一段时间进行一次操作,类似于每天早上的叫醒闹钟,网上找了多个方法介绍的都是AlarmManage,方法如下,只需要在服务启动的时候调用一下,就会有隔一段时间服务自己调自己重置服务:
private void keepAlives() {
Intent i = new Intent();
i.setClass(this, MyService.class);
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
AlarmManager alarmMgr = (AlarmManager) this.getSystemService(ALARM_SERVICE);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 180*1000,
180*1000, pi);
}
AlarmManager.setRepeating()方法来实现。在API 19(即Kitkat)之后,这种方式虽然能够唤醒,但是时间不准,我找到了另外一个方法AlarmClock,使用的是RTC唤醒,所以比较准时,类似于闹钟,又只能在API21上使用,所以加了一个注解
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void keepAlives(){
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
long TriggerAtTime = System.currentTimeMillis() + 180*1000;
Intent i = new Intent(this, MyService.class);
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
if (manager == null) throw new AssertionError();
manager.setAlarmClock(new AlarmManager.AlarmClockInfo(TriggerAtTime, pi), pi);
}