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

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

Мои вопросы:

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

person Shine    schedule 29.03.2018    source источник


Ответы (1)


ну, вскоре узнал, что .setLifetime(Lifetime.FOREVER) нужно:

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

в манифесте. Пожалуйста, смотрите вопросы 1 и 3, спасибо

person Shine    schedule 29.03.2018