2015-03-18 81 views
7

ho un problema con lavori scheduleds con JobScheduler nella nuova API Android 21. Questo è il codice che cosa ho pianificare il processo con un intervallo di 60 secondi come di seguito:Pianificazione dei processi con 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(); 

mio JobService solo stampare il tempo di esecuzione nel Logcat, ma lo spettacolo di registro che corrono il servizio in questi momenti:

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 

E 'strano perché il lavoro che deve essere avviata a almeno 1 volta entro 1 minuto come ho impostato con setPeriodic (60000) metodo. È anche curioso come l'intervallo aumenta tra le corse. In questo momento l'ora è Mer Mar 18 09:09:00 BRT 2015 e il lavoro non è stato eseguito di più.

È un problema con l'API di JobScheduler? (Sono in esecuzione in Nexus 5 con Android 5.0.1)

risposta

8

Il tempo che cambia ha a che fare con i criteri di back-off per riprovare i lavori. Di default è impostato su esponenziale. Immagino che anche il tuo lavoro non sia terminato correttamente quando hai finito con questo chiamando jobFinished(JobParameters params, boolean needsReschedule).

Ho scritto uno blog post che si concentra su tutte le piccole cose con JobScheduler. Consiglio vivamente di leggerlo.

3

Ho avuto lo stesso problema e penso che potrebbe essere collegato con le esigenze interne della classe JobInfo:

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

Sembra JobInfo non vi permetterà di mettere intervallo più piccolo di quello.