7

Ich bemerkte, dass mein geplanter JobScheduler den Job viel zu oft ausführt. Ich habe es so eingestellt, dass es täglich ausgeführt wird und es erfordert, dass es im Leerlauf ist, auf Wlan steht und geladen wird, aber wenn diese Bedingungen erfüllt sind, wird der Job wie alle 10 Minuten oder noch häufiger ausgeführt.Android JobScheduler läuft viel zu oft bei Verwendung von setPeriodic()

Mein Code:

JobInfo.Builder builder = new JobInfo.Builder(1, 
        new ComponentName(context.getPackageName(), SyncJobService.class.getName())); 


builder.setPeriodic(TimeUnit.DAYS.toMillis(1)) 
     .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) 
     .setRequiresCharging(true) 
     .setRequiresDeviceIdle(true); 

int code = jobScheduler.schedule(builder.build()); 
if (code <= 0) { 
    Log.e(TAG, "Could not scheduled job: " + code); 
    return; 
} 

Log.e(TAG, "Scheduled job"); 

Der Auftrag führt einen Hintergrund-Thread-Daten aus dem Internet herunterladen, und nach dem Herunterladen von Daten rufen getan wird Ich

mService.jobFinished(mParams, true); 

den Job Scheduler zu benachrichtigen, dass die Job ist fertig und sollte es neu planen. Wie kommt es, dass der Job so oft ausgeführt wird, selbst wenn der Zeitraum auf einen Tag festgelegt ist? Mein Android 6.0.1-Gerät geht fast nie in den Doze-Modus, weil der Job so oft läuft.

Antwort

12

, nachdem die Daten herunterladen Ich nenne mService.jobFinished(mParams, true); getan wird, um den Job-Scheduler zu benachrichtigen, dass die Arbeit erledigt ist, und es sollte es

neu planen, dass Ihr Problem genau dort ist. Verwenden Sie false, nicht true.

false sagt, "die Arbeit ist für diesen Job erledigt". true sagt "wir hatten ein Problem, bitte verschieben Sie diesen Job erneut, um bald geschehen zu können". Zum Beispiel besagt das Kriterium, dass Sie eine Internetverbindung haben müssen, aber vielleicht haben Sie Schwierigkeiten, sich mit Ihrem Server zu verbinden. In diesem Fall geben Sie true zurück, in der Hoffnung, dass das Problem ein wenig aufklärt.

Sie könnten auch in Betracht ziehen, die Backoff-Regeln via setBackoffCriteria() für die Fälle anzupassen, in denen Sie wirklich true zurückgeben möchten.

+2

Oh, das erklärt die Probleme, die ich hatte. Scheint so, als hätte ich die Dokumentation falsch verstanden. Vielen Dank! – qwertz

Verwandte Themen