Il JobScheduler chiama onStartJob()
più volte, anche se il lavoro è terminato. Tutto funziona bene, se pianifico un singolo lavoro e aspetto che sia terminato. Tuttavia, se pianifico due o più lavori con ID diversi allo stesso tempo, viene richiamato onStartJob()
dopo aver richiamato jobFinished()
.Android JobScheduler onStartJob chiamato più volte
Per esempio ho pianificazione di un processo 1 e di lavoro 2 con esattamente gli stessi parametri eccetto l'ID, l'ordine è:
onStartJob()
per lavoro 1 e lavoro 2- Entrambi i lavori di finitura, così
jobFinished()
è invocato per entrambi - Dopo che
onStartJob()
viene chiamato di nuovo per entrambi i posti di lavoro con lo stesso ID
il mio lavoro è molto semplice e non complicata .
public class MyJobService extends JobService {
@Override
public boolean onStartJob(final JobParameters params) {
new Thread(new Runnable() {
@Override
public void run() {
try {
// do something
} finally {
// do not reschedule
jobFinished(params, false);
}
}
}).start();
// yes, job running in the background
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
// mark my background task as stopped
// do not reschedule
return false;
}
}
ho pianificare i posti di lavoro come questo
JobInfo jobInfo = createBaseBuilder(request)
.setMinimumLatency(2_000L)
.setOverrideDeadline(4_000L)
.setRequiresCharging(false)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.build();
int scheduleResult = mJobScheduler.schedule(jobInfo);
// is always success
Non so cosa c'è di sbagliato.
Ho lo stesso problema, @vRallev. L'unico modo per evitare che il lavoro venga eseguito due volte è di restituire 'false' da' onStartJob() '(anche se ho impostato un' AsyncTask' in esecuzione in quel momento). Mentre questo sembra funzionare per me, sospetto che in futuro causerà problemi, in cui il sistema pensa che il lavoro sia finito e uccide il processo prematuramente. Hai mai trovato una soluzione a questo? – drmrbrewer
Ricordo se un lavoro era già iniziato. Funziona per me, vedi https://github.com/evernote/android-job/blob/master/library/src/main/java/com/evernote/android/job/v21/PlatformJobService.java E: https : //github.com/evernote/android-job/blob/master/library/src/main/java/com/evernote/android/job/JobProxy.java#L110 – vRallev