Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase作业未持久化_Android_Firebase_Android Jobscheduler_Firebase Job Dispatcher - Fatal编程技术网

Android Firebase作业未持久化

Android Firebase作业未持久化,android,firebase,android-jobscheduler,firebase-job-dispatcher,Android,Firebase,Android Jobscheduler,Firebase Job Dispatcher,自从安卓8改变后,我在设置一个定期工作时遇到了各种各样的问题。我选择使用Firebase dispatcher,作为它的生命周期。永远听起来很有希望。我的工作是下载k个JSON数据并定期存储,时间并不重要。这是我创建作业的代码: dispatcher.newJobBuilder() .setService(MPWService.class) .setTag("mpw-updater") .setRecurring(true)

自从安卓8改变后,我在设置一个定期工作时遇到了各种各样的问题。我选择使用Firebase dispatcher,作为它的
生命周期。永远
听起来很有希望。我的工作是下载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分钟左右安排一次。但是,当应用程序长时间不使用(并且不再有使用全局接收器重新安排作业的方法)或设备重新启动时,作业将不再被安排

用于分派作业的代码位于活动的onCreate方法中:

    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
    Job myJob = MPWService.getJobUpdate(prefs, dispatcher);
    dispatcher.schedule(myJob);
我试着用
adb shell dumpsys活动服务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()
    调用来结束服务执行
  • 为什么我的作业属性被标记为[重复出现],而不是我预期的[持续出现,重复出现]
  • 最早的=1612秒,最晚的=1792秒是什么意思

  • 很快,我们就发现
    .setLifetime(Lifetime.FOREVER)
    需要:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    
    
    
    在舱单上。请参见问题1和3,谢谢