2

Ich habe alle verfügbaren offiziellen Dokumente zu lesen (was überraschenderweise nicht viel) und alles, was ich für periodische Aufgaben bekommen könnte, ist dieser CodeWie wird der Zeitraum einer periodischen Aufgabe in Firebase JobDispatcher festgelegt?

  .setRecurring(true) 
      // start between 0 and 60 seconds from now 
      .setTrigger(Trigger.executionWindow(0, 60)) 

Ich weiß, dass .setRecurring der Job periodisch macht und dass die trigger macht es Start in einem 60-Sekunden-Intervall, aber was ist mit dem zweiten Mal, dass es ausgeführt wird? bedeutet das, dass das 2. Mal auch von der 1. Minute an 60 Sekunden ausgeführt wird?

Das kann nicht wahr sein, denn auch in den Hintergrundaktivitäten die Optimierung in Betracht zu ziehen und wie Dienste ein wenig später laufen als sie sollten 60 Sekunden Zeit programmieren, während der Auftrag über 5/10/20 Minuten läuft später ist zu viel Unterschied. Die offiziellen Dokumente sagen, dass der Unterschied Sekunden und vielleicht ein paar Minuten nicht über 20 Minuten ist.

Grundsätzlich ist meine Frage ist dies .setTrigger(Trigger.executionWindow(0, 60)) wirklich bedeuten, dass der Zeitraum 60 Sekunden ist oder bekomme ich das falsch?

Antwort

0

wird es klarer, wenn Sie an der Quelle des Trigger-Klasse aussehen here

heißt es:

/** 
 
    * Creates a new ExecutionWindow based on the provided time interval. 
 
    * 
 
    * @param windowStart The earliest time (in seconds) the job should be 
 
    *     considered eligible to run. Calculated from when the 
 
    *     job was scheduled (for new jobs) or last run (for 
 
    *     recurring jobs). 
 
    * @param windowEnd The latest time (in seconds) the job should be run in 
 
    *     an ideal world. Calculated in the same way as 
 
    *     {@code windowStart}. 
 
    * @throws IllegalArgumentException if the provided parameters are too 
 
    *         restrictive. 
 
    */ 
 
    public static JobTrigger.ExecutionWindowTrigger executionWindow(int windowStart, int windowEnd) { 
 
     if (windowStart < 0) { 
 
      throw new IllegalArgumentException("Window start can't be less than 0"); 
 
     } else if (windowEnd < windowStart) { 
 
      throw new IllegalArgumentException("Window end can't be less than window start"); 
 
     } 
 

 
     return new JobTrigger.ExecutionWindowTrigger(windowStart, windowEnd); 
 
    }

oder einfach Strg + Klicken Sie auf die Trigger dann Android Studio wird bringen Sie zu seiner Quelle. Wenn Sie also schreiben: .setTrigger(Trigger.executionWindow(0, 60)) dann wird es alle Sekunden ausgeführt werden

1

Wenn es nicht periodisch ist.

.setRecurring(false) 
.setTrigger(Trigger.executionWindow(x, y)) 

Dieser Code wird unsere Aufgabe, zwischen der Zeit x Sekunden aus dem Job geplant ausgeführt wurden und y Sekunden aus dem Job eingeplant wurden.

x ist bekannt als windowStart, die die früheste Zeit (in Sekunden) der Job förderfähig angesehen werden soll laufen. Errechnet sich aus, wenn der Auftrag geplant wurde (für neue Jobs)

y ist bekannt als windowEnd, die neueste Zeit (in Sekunden) der Job in einer idealen Welt betrieben werden. Berechnet auf die gleiche Weise wie windowStart.

Wenn es periodisch ist

.setRecurring(true)    
.setTrigger(Trigger.executionWindow(x, y)) 

Dieser Code wird unsere Aufgabe, zwischen der Zeit x Sekunden aus dem Job geplant ausgeführt wurden und y Sekunden aus dem Job waren scheduled.Since dies periodisch die nächste Ausführung wird x Sekunden geplant, nachdem der Auftrag beendet ist.

Kann sich beziehen this Antwort auch.

Verwandte Themen