No se ejecuta el Programador de trabajos en Android N

Job Scheduler está funcionando como se esperaba en los dispositivos Android Marshmallow y Lollipop, pero no se está ejecutando y Nexus 5x (Android N Preview).

Código para programar el trabajo

ComponentName componentName = new ComponentName(MainActivity.this, TestJobService.class.getName()); JobInfo.Builder builder; builder = new JobInfo.Builder(JOB_ID, componentName); builder.setPeriodic(5000); JobInfo jobInfo; jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); jobInfo = builder.build(); int jobId = jobScheduler.schedule(jobInfo); 

El servicio se define en manifiesto como:

 <service android:name=".TestJobService" android:permission="android.permission.BIND_JOB_SERVICE" /> 

¿Hay alguien que tenga este problema en Android N (Vista previa)?

En Android Nougat la llamada al método setPeriodic(long intervalMillis) hace uso de setPeriodic (long intervalMillis, long flexMillis) para programar trabajos periódicos.

Según la documentación:

JobInfo.Builder setPeriodic (intervalo largoMillis, flexMillis largo)

Especifique que este trabajo debe repetirse con el intervalo y la flexión proporcionados. El trabajo se puede ejecutar en cualquier momento en una ventana de longitud flexible al final del período.

IntervalMillis long: Intervalo de milisegundos para el cual este trabajo se repetirá. Se aplica un valor mínimo de getMinPeriodMillis ().

FlexMillis largo: Flex de milisegundo para este trabajo. La flexión se sujeta para ser al menos getMinFlexMillis () o 5 por ciento del período, lo que sea mayor.

Ejemplo de trabajo periódico programado durante 5 segundos:

 private static final int JOB_ID = 1001; private static final long REFRESH_INTERVAL = 5 * 1000; // 5 seconds JobInfo jobInfo = new JobInfo.Builder(JOB_ID, serviceName) .setPeriodic(REFRESH_INTERVAL) .setExtras(bundle).build(); 

El código anterior funciona bien en Lollipop y Marshmallow, pero cuando se ejecuta en Nougat se dará cuenta del siguiente registro:

 W/JobInfo: Specified interval for 1001 is +5s0ms. Clamped to +15m0s0ms W/JobInfo: Specified flex for 1001 is +5s0ms. Clamped to +5m0s0ms 

Puesto que hemos establecido el intervalo de actualización periódica a 5 segundos, que es menor que el umbral getMinPeriodMillis() . Android Nougat hace cumplir el getMinPeriodMillis() .

Como solución, utilizo el siguiente código para programar trabajos a intervalos periódicos si el intervalo de trabajo es inferior a 15 minutos.

 JobInfo jobInfo; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { jobInfo = new JobInfo.Builder(JOB_ID, serviceName) .setMinimumLatency(REFRESH_INTERVAL) .setExtras(bundle).build(); } else { jobInfo = new JobInfo.Builder(JOB_ID, serviceName) .setPeriodic(REFRESH_INTERVAL) .setExtras(bundle).build(); } 

Ejemplo de JobService ejemplo:

 public class SampleService extends JobService { @Override public boolean onStartJob(JobParameters params) { doSampleJob(params); return true; } @Override public boolean onStopJob(JobParameters params) { return false; } public void doSampleJob(JobParameters params) { // Do some heavy operation ...... // At the end inform job manager the status of the job. jobFinished(params, false); } } 
  • Aplicación que no instala algún dispositivo Android Android N android
  • OnCreateOptionsMenu no recibe llamadas en Android 7.0
  • Excepción de puntero nulo en la ventana de sugerencias popup en Samsung Galaxy Android 7
  • Detectar cambios de conectividad en Android 7.0 Nougat cuando la aplicación está en primer plano
  • Cómo ocultar la fecha en el selector de fecha
  • Notification.bigContentView está obsoleto en API 24 (Nougat) ¿cuál es la alternativa?
  • Android Speech Recognition API no funciona en Android 7 Nougat
  • Comprobación de la conectividad a Internet con Android mejor método
  • Botones que faltan en AlertDialog | Android 7.0 (Nexus 5x)
  • 'La aplicación está escaneando con demasiada frecuencia' con ScanSettings.SCAN_MODE_OPPORTUNISTIC
  • Doze, diferente entre Marshmallow y Nougat
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.