4

Ich verwende Firebase-JobDispatcher. Ich habe einige Jobs geplant und es funktioniert gut, wenn ich das Gerät einschalten.Aber wenn ich mein Gerät neu starte, dann werden die geplanten Aufträge nicht ausgeführt oder ist es nicht neu geplant werden? ich verwendet habe setLifetime(Lifetime.FOREVER) .Still Jobs auf dem Gerät reboot.Below verloren sind, ist der Code im using-Firebase JobDispatcher-Geplante Jobs sind beim Neustart des Geräts verloren

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

Es gibt ein Problem - https://github.com/firebase/firebase-jobdispatcher-android/issues/101 – Oleksandr

Antwort

2

Nach Lifetime.FOREVER Einstellung können Sie die folgende Berechtigung in AndroidManifest.xml Datei hinzufügen, haben

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

Und unten ist der Code einen Job

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

Eine weitere Sache zu planen, um zu prüfen nicht Ausführungsfenster zu 0,0 gesetzt. Setzen Sie immer einen windowEnd größer als windowStart

+0

nicht working..still Jobs auf Neustart des Geräts verloren gehen –

+0

Sind die Einschränkungen nach dem Neustart erfüllt? Ich meine, ist das Telefon mit dem Internet verbunden, um den Job zu führen? – arjun

+0

Ja, es ist mit dem Internet verbunden, und wenn ich einen neuen Job plane, wird der Job ausgeführt. Nur wenn ich neu starte Gerätejobs sind verloren –

0

Ich denke, in Ihrem MyJobService sollte false zurückgeben, so dass der Job nach der Ausführung neu geplant werden kann;

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