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

 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é?

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.

  • Android jobScheduler no se detendrá con jobFinished (params, false)
  • Android java.lang.IllegalArgumentException: Ningún servicio de este tipo ComponentInfo JobScheduler
  • ¿Funcionará GCM Network Manager en dispositivos que no sean de Play?
  • API de Jobscheduler android L
  • Cargador de difusión desconectado en Android O
  • Android JobScheduling - Tengo que pasar un objeto a mi trabajo, pero ¿cómo?
  • ¿Cómo puedo probar mi JobService con una prueba de Instrumentación?
  • Firebase JobDispatcher vs Evernote Android Trabajo - ¿cómo comparar estos dos?
  • SyncAdapter vs JobScheduler
  • Android JobScheduler - no puede crear un trabajo persistente
  • JobScheduler: controlar el retraso de las restricciones que se están cumpliendo para ejecutar el trabajo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.