Android JobScheduler siempre funciona durante 1 minuto
Estoy tratando de implementar el servicio de actualización de fondo con el nuevo JobScheduler (compat por tatarka). Aquí está mi servicio
@Override public boolean onStartJob(JobParameters params) { Timber.i("on start job: " + params.getJobId()); return true; } @Override public boolean onStopJob(JobParameters params) { Timber.i("on stop job: " + params.getJobId()); return true; }
Aquí está mi JobInfo
- Android JobScheduler se ejecuta varias veces
- No se ejecuta el Programador de trabajos en Android N
- Haga que el trabajo se ejecute y se agrupe cada 2 minutos, si la aplicación está cerrada o eliminada de la memoria
- JobScheduler publicar trabajos dos veces (no se espera)
- El programador de tareas no se ejecuta dentro del intervalo establecido
public void scheduleJob(View v) { JobInfo job = new JobInfo.Builder(kJobId++ /*jobid*/, new ComponentName(getActivity(), RefreshJobService.class)) .setPeriodic(2000) .build(); mTestService.scheduleJob(job); }
En log veo que mi trabajo siempre funciona durante 1 minuto 12-31 12:38:03.884 10059-10059/@/RefreshJobService﹕ on stop job: 0 12-31 12:39:03.891 10059-10059/@/RefreshJobService﹕ on start job: 0 12-31 12:40:03.911 10059-10059/@/RefreshJobService﹕ on stop job: 0 12-31 12:42:08.841 10059-10059/@/RefreshJobService﹕ on start job: 0 12-31 12:43:08.858 10059-10059/@/RefreshJobService﹕ on stop job: 0
¿Entonces por qué? Estoy establecido periódicamente a 2000ms, cualquier valor no influyen en el intervalo de 1 minuto para el trabajo. ¿Por qué?
- Android JobScheduler: Si programa el mismo trabajo con tiempo periódico, ¿empieza de nuevo el período?
- Aclaración de setUpdateCurrent en OneOffTask
- ¿Qué herramientas están disponibles para probar JobScheduler?
- Firebase JobDispatcher - ¿cómo funciona en comparación con las API anteriores (JobScheduler y GcmTaskService)?
- JobScheduler - ¿Cómo puedo determinar un ID de trabajo único?
- GCM Network Manager - Tarea periódica no disparando
- FirebaseJobDispatcher se ejecuta en el cambio de red
- Android N: lidiar con la falta de CONNECTIVITY_CHANGE
Parece que usted está preguntando por qué es que usted recibe onStopJob exactamente un minuto después de que su trabajo se inicia. Este tiempo de espera de 1 minuto se define en el código aquí
Hasta Android 5.1.1 había un tiempo de espera de 60 segundos para un solo trabajo. A partir de Android 6, el tiempo de espera es ahora de 10 minutos.
onStopJob
se llama cuando el sistema desea cancelar su trabajo. La razón por la que está cancelando su trabajo es porque piensa que todavía está funcionando. jobFinished(params, bool)
llamar a jobFinished(params, bool)
en algún momento de su trabajo para decirle al planificador que está completo, de lo contrario se apagará y llamará a onStopJob
para cancelarlo. Además, devolver 'true' de onStartJob
le dice al sistema que no ha terminado de procesar. Debería devolver 'false' a menos que siga haciendo trabajo extra, por ejemplo. Pasando el trabajo a un hilo separado.
@Override public boolean onStartJob(JobParameters params) { Timber.i("on start job: " + params.getJobId()); jobFinished(params, false); return false; }
43matthew es correcto, pero me gustaría añadir algo más a esto. Los 2000 ms que está hablando es el intervalo periódico después del cual el trabajo se inicia de nuevo, es decir, ejecutar este trabajo cada 2000 ms , no el intervalo para el cual se ejecutará el trabajo.