7

Ho notato che il mio JobScheduler pianificato esegue il lavoro troppo spesso. L'ho impostato per l'esecuzione quotidiana e richiede di essere inattivo, di essere su wlan e di essere in carica, ma quando si verificano tali condizioni il lavoro viene eseguito come ogni 10 minuti o anche più frequentemente.JobScheduler Android eseguito troppo spesso quando si utilizza setPeriodic()

Il mio codice:

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

Il lavoro viene eseguito un thread in background per scaricare dati da Internet, e dopo il download dei dati avviene chiamo

mService.jobFinished(mParams, true); 

per notificare al job scheduler che la il lavoro è fatto e dovrebbe ripianificarlo. Come mai il lavoro viene eseguito così spesso anche quando il periodo è impostato su un giorno? Il mio dispositivo Android 6.0.1 non entra quasi mai in modalità doze perché il lavoro viene eseguito così spesso.

risposta

12

dopo che il download dei dati avviene Chiamo mService.jobFinished(mParams, true); per notificare al job scheduler che il lavoro è fatto e si deve riprogrammare lo

Questo è il tuo problema proprio lì. Utilizzare false, non true.

false dice "il lavoro è fatto per questo lavoro". true dice "abbiamo avuto un problema, si prega di riprogrammare nuovamente questo lavoro per accadere presto". Ad esempio, i criteri indicano che devi avere una connessione Internet, ma forse hai difficoltà a connettersi al tuo server. In tal caso, restituire true, nella speranza che il problema si risolva in un po '.

Si potrebbe anche considerare di regolare le regole di backoff via setBackoffCriteria() per i casi in cui si desidera veramente restituire true.

+2

Oh, questo spiega i problemi che stavo avendo. Sembra che abbia frainteso la documentazione. Grazie! – qwertz

Problemi correlati