2015-03-18 7 views
7

Ich habe ein Problem mit Jobs scheduleds mit Jobscheduler in neuem Android-API 21 Dies ist der Code, was ich den Job mit 60 Sekunden Intervall wie unten plane:Planen von Jobs mit Jobscheduler in Android

ComponentName serviceName = new ComponentName(this, MyJobService.class); 
JobInfo jobInfo = new JobInfo.Builder(0, serviceName) 
     .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) 
     .setPeriodic(60000) 
     .build(); 

Mein Jobservice nur die Zeit der Laufzeit in Logcat drucken, aber das Protokoll zeigt, dass Service-Lauf in diesen Momenten:

03-18 08:37:26.334: I/JOB(32662): Wed Mar 18 08:37:26 BRT 2015 
03-18 08:37:56.364: I/JOB(32662): Wed Mar 18 08:37:56 BRT 2015 
03-18 08:39:21.418: I/JOB(32662): Wed Mar 18 08:39:21 BRT 2015 
03-18 08:41:51.670: I/JOB(32662): Wed Mar 18 08:41:51 BRT 2015 
03-18 08:45:52.192: I/JOB(32662): Wed Mar 18 08:45:52 BRT 2015 
03-18 08:54:20.678: I/JOB(32662): Wed Mar 18 08:54:20 BRT 2015 

es ist seltsam, weil der Job sollte es mindestens 1 Mal innerhalb von 1 Minute ausführen, wie ich mit setPeriodic eingestellt (60000) Methode. Es ist auch interessant, wie das Intervall zwischen den Läufen zunimmt. In diesem Moment ist die Zeit Wed Mar 18 09:09:00 BRT 2015 und der Job wurde nicht mehr ausgeführt.

Es ist ein Problem mit JobScheduler API? (Ich laufe in Nexus 5 mit Android 5.0.1)

Antwort

8

Die Zeitänderung hat mit den Back-Off-Kriterien für das Wiederholen von Jobs zu tun. Standardmäßig ist es exponentiell eingestellt. Ich schätze, dass Sie Ihren Job auch nicht richtig beenden, wenn Sie damit fertig sind, indem Sie jobFinished(JobParameters params, boolean needsReschedule) anrufen.

Ich schrieb eine blog post, die auf all die kleinen Dinge mit dem JobScheduler konzentrieren. Ich empfehle es sehr, es zu lesen.

3

Ich hatte das gleiche Problem, und ich denke, es könnte mit den internen Anforderungen der Klasse Jobinfo angeschlossen werden:

/* Minimum interval for a periodic job, in milliseconds. */ 
private static final long MIN_PERIOD_MILLIS = 15 * 60 * 1000L; // 15 minutes 

Es ist wie Jobinfo aussieht wird nicht zulassen, als das Intervall kleiner zu setzen.

Verwandte Themen