Задание Firebase не сохранено

У меня возникли различные проблемы с настройкой повторяющейся работы после изменения 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]

Мои вопросы:

  1. Почему last_run = N / A? Я почти уверен, что всегда заканчиваю выполнение службы вызовом jobFinished().
  2. почему атрибуты моей работы отмечены [ПОВТОРЯЮЩИЕСЯ], а не [ПРОДОЛЖАЮТСЯ, ПОВТОРЯЮТСЯ], как я ожидал?
  3. Что означает earliest=1612s,latest=1792s?
1
0
235
1

Ответы 1

Что ж, вскоре выяснилось, что для .setLifetime(Lifetime.FOREVER) нужны:

<uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED"/>

в манифесте. См. Вопросы 1 и 3, спасибо

Другие вопросы по теме