火底工作不持续



自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();

IT 几乎按照预期的工作,根据intervalMsec安排每30分钟左右。但是,当不再使用应用程序(并且不再使用全局接收器重新安排工作的方法(或设备会重新启动,则该作业将不再安排。

用于调度作业的代码放置在Activity的Oncreate方法中:

    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的含义是什么?

好吧,很快发现.setLifetime(Lifetime.FOREVER)需要:

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

在清单中。请参阅问题1和3,谢谢

相关内容

  • 没有找到相关文章

最新更新