У меня возникли различные проблемы с настройкой повторяющейся работы после изменения Android 8. Я решил использовать диспетчер Firebase, поскольку его Lifetime.FOREVER звучал многообещающе. Моя работа загружает около k данных JSON и регулярно сохраняет их, время не так важно. Это мой код для создания работы:
dispatcher.newJobBuilder()
.setService(MPWService.class)
.setTag("mpw-updater")
.setRecurring(true)
.setLifetime(Lifetime.FOREVER)
.setTrigger(periodicTrigger(intervalMsec, (intervalMsec/100)*10))
.setReplaceCurrent(true)
// retry with exponential backoff
//.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.setExtras(myExtrasBundle)
.build();
почти работает как положено, которое планируется каждые 30 минут или около того, на основе intervalMsec. Но если приложение не используется в течение длительного времени (и больше нет способа перепланировать задание с глобальными приемниками) или устройство перезагружается, задание больше не будет планироваться.
Код, используемый для отправки задания, помещается в метод onCreate Activity:
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job myJob = MPWService.getJobUpdate(prefs, dispatcher);
dispatcher.schedule(myJob);
Я пробовал отлаживать свой сервис с помощью adb shell dumpsys activity service GcmService | grep mystuff, и вот мои вопросы
(scheduled) it.angelic.mpw/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag = "mpw-updater"
trigger=window{start=1620s,end=1800s,earliest=1612s,latest=1792s} requirements=[NET_ANY] attributes=[RECURRING] scheduled=-7s last_run=N/A jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
(finished) [it.angelic.mpw/com.firebase.jobdispatcher.GooglePlayReceiver:mpw-updater,u0]
Мои вопросы:
jobFinished().earliest=1612s,latest=1792s?Что ж, вскоре выяснилось, что для .setLifetime(Lifetime.FOREVER) нужны:
<uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED"/>
в манифесте. См. Вопросы 1 и 3, спасибо