4

Firebase-JobDispatcherを使用しています。デバイスをオンにしておくといくつかのジョブがスケジュールされています。デバイスを再起動すると、スケジュールされたジョブは実行されません。それは、デバイスreboot.Belowに失われ、私はsetLifetime(Lifetime.FOREVER) .Stillジョブを使用している?再スケジュールされませんLifetime.FOREVERを設定した後Firebase JobDispatcher - デバイスの再起動時にスケジュールされたジョブが失われる

Job myJob = dispatcher.newJobBuilder() 
.setService(MyJobService.class) 
.setTag("DataSend") 
.setRecurring(false) 
.setLifetime(Lifetime.FOREVER) 
.setTrigger(Trigger.executionWindow(0, 0)) 
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL) 
.setConstraints(Constraint.ON_ANY_NETWORK) 
.setExtras(myExtrasBundle) 
.build(); 
+0

問題があります - https://github.com/firebase/firebase-jobdispatcher-android/issues/101 – Oleksandr

答えて

2

using-コードイムあるあなたはAndroidManifest.xmlファイルに

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
を、次の権限を追加しています

以下は0,0に実行ウィンドウが設定されていませんチェックするジョブに

Job job = jobDispatcher.newJobBuilder() 
    .setService(MyJobService.class) 
    .setTrigger(Trigger.executionWindow(windowStartTime, 3600)) 
    .setTag(PENDING_AUTH_JOB) //identifier for the job 
    .setRecurring(false) // should not recur 
    .setLifetime(Lifetime.FOREVER) // should persist device reboot 
    .setReplaceCurrent(false) // no need to replace previous job 
    .setConstraints(Constraint.ON_ANY_NETWORK) // set network availability constraint 
    .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL) 
    .build(); 
try { 
    jobDispatcher.mustSchedule(job); 
} catch (FirebaseJobDispatcher.ScheduleFailedException e) { 
    if (retryCount-- > 0) { 
    scheduleJob(0); 
    } 
} 

もう一つのスケジュールを設定するためのコードです。常にwindowEndをそれより大きく設定してくださいwindowStart

+0

working..stillないジョブは、デバイスの再起動 –

+0

に失われ、再起動後に会った制約はありますか?私は仕事を実行するためにインターネットに接続されている電話ですか? – arjun

+0

はいそれはインターネットに接続されていて、私は新しいジョブをスケジュールして実行します。もし私が再起動した場合、デバイスジョブは失われます。 –

0

あなたのMyJobServiceでは、実行後にジョブを再スケジュールできるようにfalseを返すべきだと思います。

public boolean onStartJob(final com.firebase.jobdispatcher.JobParameters jobParameters) { 

     //Offloading work to a new thread. 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       realm=Realm.getDefaultInstance(); 

       codeYouWantToRun(jobParameters); 
      } 
     }).start(); 

     return true; 
    } 



public void codeYouWantToRun(final JobParameters parameters) { 
Log.d(TAG, "completeJob: " + "jobStarted"); 
//bla bla super code doing its linga linga ling 
       Log.d(TAG, "completeJob: " + "jobFinished"); 

        //Tell the framework that the job has completed and doesnot needs to be reschedule. Set jobFinished false so that it can rescheduled on a change of network 
        jobFinished(parameters, false); 
    } 
関連する問題