JobScheduler – Codificación en Flow

Desde Android Oreo, las aplicaciones inactivas ya no pueden mantener servicios en segundo plano. Así que si necesitas hacer operaciones aunque tu app no se esté ejecutando en primer plano, deberías usar un JobScheduler en su lugar.
En este vídeo vamos a configurar un JobScheduler de este tipo creando una clase que extienda a JobService y luego programándolo con el JOB_SCHEDULER_SERVICE.
En la clase JobService, anulamos onStartJob y onStopJob. En onStartJob iniciaremos un hilo de fondo para realizar algunas operaciones de larga duración (falsas). En onStopJob cancelamos nuestro trabajo porque el sistema liberará el wakelock cuando los criterios para nuestro trabajo ya no se cumplan (por ejemplo, requerimos una red no medida y el usuario desactiva el WiFi). En este caso reprogramaremos nuestra tarea para volver a intentarlo más tarde.
Cuando programamos nuestro trabajo, pasamos un objeto JobInfo al JobScheduler, que definirá bajo qué circunstancias queremos que el sistema ejecute nuestro trabajo. Aquí podemos establecer criterios como setRequiresDeviceCharging, setRequiredNetworkType, setPeriodic y más. Incluso podemos hacer que sobreviva a los reinicios del dispositivo con setPersisted.
Por último registramos nuestro JobService en el manifiesto con el permiso android.permission.BIND_JOB_SERVICE y el sistema iniciará entonces nuestro servicio en el momento oportuno, aunque nuestra app no se esté ejecutando.