Estoy tratando de hacer que mi aplicación funcione en Android 9. El siguiente código funciona bien hasta Android 8, pero por alguna razón, JobService no se reprograma en Android 9. Se programa la primera vez pero no se reprograma según al conjunto periódico.
class RetrieveJobService : JobService() { override fun onStartJob(params: JobParameters): Boolean { doBackgroundWork(params) return true } private fun doBackgroundWork(params: JobParameters) { Thread { try { doRetrieveBackgroundStuff(this) jobFinished(params, false) } catch (e: Exception) { jobFinished(params, false) } }.start() } override fun onStopJob(params: JobParameters): Boolean { return false } }Y aquí mi JobInfo.Builder
val builder = JobInfo.Builder(jobID, componentName) .setPersisted(true) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { builder.setPeriodic(millis, 15 * 60 * 1000) //15 min } else { builder.setPeriodic(millis) } builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) val scheduler = context.getSystemService(JOB_SCHEDULER_SERVICE) as JobScheduler val resultCode = scheduler.schedule(builder.build())¿Algunas ideas? EDITAR: Para que quede claro, este código funcionó bien en Android 8 y versiones anteriores y también funciona en el emulador de Android Studio que ejecuta Android 9. Por lo que puedo probar, no funciona en ningún dispositivo físico que ejecute Android 9.
Si pasas por EL ENLACE , encontrarás:
Desafortunadamente, algunos dispositivos implementan la eliminación de la aplicación desde el menú de recientes como una detención forzada. Stock Android no hace esto. Cuando una aplicación se detiene a la fuerza, no puede ejecutar trabajos, recibir alarmas o transmisiones, etc. Por lo tanto, desafortunadamente, no es factible para nosotros solucionarlo: el problema radica en el sistema operativo y no hay solución.
Se trata de un problema conocido. Para ahorrar batería, muchos fabricantes fuerzan el cierre de la aplicación, cancelando así todas las tareas del período, alarmas y receptores de transmisión, etc. Los principales fabricantes son OnePlus (tiene la opción de cambiar), Redmi, Vivo, Oppo, Huawei.
ACTUALIZAR
Cada uno de estos dispositivos tiene administradores de optimización de tipo AutoStartManagers/AutoLaunch/StartManager. Lo que evita que las actividades de fondo comiencen de nuevo. Tendrá que pedirle manualmente al usuario que incluya su aplicación en la lista blanca, para que la aplicación pueda iniciar automáticamente sus procesos en segundo plano. Siga ESTE y ESTE enlace, para obtener más información.
Los métodos para agregar a la lista blanca para diferentes fabricantes se dan en esta respuesta de stackoverflow . Incluso después de agregarla a la lista blanca, es posible que su aplicación no funcione debido al modo DOZE, por lo que deberá ignorar las otimizaciones de la batería
Además, en caso de que se lo pregunte, aplicaciones como Gmail/Hangout/WhatsApp/Slack/LinkedIn, etc., ya están incluidas en la lista blanca de estos administradores de inicio automático. Por lo tanto, no hay efecto en sus procesos de fondo. Siempre recibe actualizaciones y notificaciones oportunas.