Хорошо, поэтому я не могу найти какую-либо документацию или полезные веб-страницы по этому поводу.Помогите мне StackOverflow, вы моя единственная надежда.
Хорошо, поэтому изначально мой JobScheduler выглядит так:
JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
if(scheduler.getPendingJob(JOB_NUMBER) == null) {
ComponentName componentName = new ComponentName(this, MyJobService.class);
JobInfo info = new JobInfo.Builder(JOB_NUMBER, componentName)
.setRequiresCharging(false)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.setPeriodic(60 * 60 * 1000L, 5 * 60 *1000)
.build();
int resultCode = scheduler.schedule(info);
if (resultCode == JobScheduler.RESULT_SUCCESS) {
Log.d(TAG, "Service is not running, Job " + String.valueOf(JOB_NUMBER) + " Scheduled.");
} else {
Log.d(TAG, "Service is not running, However job scheduling failed.");
}
} else{
Log.d(TAG, "Service is already scheduled.");
}
... Отлично работает в Oreo (v8.0).Однако в Nougat, v7.0, задание выполняется по расписанию, но никогда не запускается.В другом вопросе stackoverflow, который я задал, я узнал, что могу запустить его, заменив setPeriodic()
на следующее:
.setMinimumLatency(1 * 1000)
.setOverrideDeadline(3 * 1000)
И с этим служба запускается.Тем не менее, это не периодически, он будет запускаться только один раз.Я не могу найти документацию / учебные пособия / примеры, которые позволяют мне выполнять периодическую работу в Android Nougat.Может ли кто-нибудь помочь мне с этим?
Есть другие вопросы о стеке потока по этой же теме:
Планировщик заданий не работает на Android N
Планировщик заданий Не повторяется периодически в Android 7.0 (Nougat)
Однако ни один из них не имеет однозначных ответов.
Последнее замечание: похоже, что передача FlexMillis на setPeriodic()
, похоже, сработала.Я собираюсь сделать больше испытаний.Я не уверен, какой код я выполнял, когда запускался logcat, но я думаю, передав:
.setPeriodic(15 * 60 * 1000, 5 * 60 *1000)
В setPeriodic
он сработал через 10 минут после того, как было запланировано задание.Однако, в отличие от Oreo, задание не запускается при первом его назначении.В Oreo, как только я создаю задание, задание запускается.Опять же, я не могу найти это упомянутое в документации.