4

Я использую Firebase-JobDispatcher. Я планировал некоторые задания и работал нормально, если я включил устройство. Но если я перезагружу свое устройство, запланированные задания не выполняются или он не получает перенесено? Я использовал setLifetime(Lifetime.FOREVER) .Still теряются рабочие места на устройстве reboot.Below является код им using-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

После установки Lifetime.FOREVER вы должны добавить следующее разрешение в AndroidManifest.xml файле

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

И ниже код, чтобы запланировать задание

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); 
    } 
} 

Еще одна вещь, чтобы проверить, не установлено окно выполнения для 0,0. всегда устанавливайте windowEnd больше, чем windowStart

+0

не working..still теряются рабочие места на устройстве перезагрузки –

+0

ли ограничения встретились после перезагрузки? Я имею в виду, что телефон подключен к Интернету для выполнения задания? – arjun

+0

Да, это связано с Интернетом, и если я планирую новое задание, которое выполняет job.only, если я перезагружаю работу устройства, теряются –

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); 
    }