У меня возникают различные проблемы с настройкой повторяющегося задания после изменений в Android 8. Я решил использовать диспетчер Firebase, так как его Lifetime.FOREVER
звучит многообещающе. Моя работа загружает несколько тысяч данных 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]
Мои вопросы:
- Почему last_run=N/A? Я почти уверен, что всегда заканчиваю выполнение службы вызовом
jobFinished()
. почему атрибуты моей работы помечены как [ПОВТОРЯЮЩАЯСЯ], а не [ПОЯВЛЯЮЩАЯСЯ, ПОВТОРЯЮЩАЯСЯ], как я ожидал?- Что означает
earliest=1612s,latest=1792s
?