作业调度程序的作业调度不一致



我使用作业调度程序在任何时间间隔发送通知,比如每隔4分钟发送通知,所以我使用

setPeriodic(持续时间*60*1000)//持续时间为4分钟

但它不一致,首先它在1分钟或2分钟后发送通知,然后1分钟,然后4分钟,然后8分钟。我猜它还缓存了以前的持续时间,这是我如何实现代码的:

public static void Scheduler(Context context){
ComponentName componentName = new 
ComponentName(context, ClsJobService.class);
JobInfo.Builder builder =  new JobInfo.Builder(0, componentName)
.setPeriodic(duration * 60 * 1000);
JobScheduler jobScheduler =  (JobScheduler) 
context.getSystemService (Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
}

您已经在Android L上使用JobScheduler以4分钟的间隔安排了一项作业。一旦安排为周期性的,此作业在您设置的间隔内的任何时间都只能运行一次(开始:调用schedule()的时间,结束:加4分钟)。它只会在完成已经运行的间隔后再次运行,只会在新的范围内运行。。。。此行为将继续,直到您取消作业。

例如:作业被安排为周期性的4分钟,1分钟后执行;根据4分钟的范围,此作业将在3分钟后再次运行。在新的范围内,它可以在4分钟内的任何时间执行

如果您不希望JobScheduler出现这种周期性行为,请考虑使用AlarmManager服务将您的作业安排为每4分钟触发一次通知,并在触发通知后重新安排。

观察:JobScheduler在内部使用AlarmManager服务来安排需要安排的作业,定义运行该作业的开始和结束时间。

Android L源代码参考:

  • 设置安排定期作业的时间
  • 为重新安排的定期作业设置时间
  • 使用AlarmManager计划定期作业时

这是按设计工作的。(也是JobScheduler"力量"的一部分)

来自文档:

setPeriodic():指定此作业应按照提供的间隔重复执行,并且灵活作业可以在任意时间执行,窗口长度为这段时期的结束。

为什么不使用Timertask?

https://developer.android.com/reference/java/util/TimerTask.html

最新更新