Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

  • ¿Android N no está enviando android.net.conn.CONNECTIVITY_CHANGE?
  • Botones que faltan en AlertDialog | Android 7.0 (Nexus 5x)
  • Android Speech Recognition API no funciona en Android 7 Nougat
  • Comprobación de la conectividad a Internet con Android mejor método
  • Android.os.TransactionTooLargeException en Nougat
  • Android toolchain jack no reconoce java.util.function.Predicate en secuencia
  • Acepta programáticamente la llamada en Nougat
  • Excepción de puntero nulo en la ventana de sugerencias popup en Samsung Galaxy Android 7
  • One Solution collect form web for “No se ejecuta el Programador de trabajos en Android N”

    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); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.