¡Te damos la bienvenida a la Vista previa para desarrolladores de Android 12! Envíanos comentarios con frecuencia y tan pronto como puedas, y ayúdanos a hacer de Android 12 la mejor versión hasta el momento.

Restricciones para el inicio del servicio en primer plano

Ícono para enviar comentarios Nos encantaría saber qué opinas de estas restricciones. Realiza una breve encuesta para contarnos lo que piensas. En particular, queremos conocer los casos de uso de tu app que se verán afectados por este cambio.

Las apps orientadas a Android 12 ya no pueden iniciar servicios en primer plano mientras se ejecutan en segundo plano, excepto en algunos casos especiales. Si una app intenta iniciar un servicio en primer plano mientras se ejecuta en segundo plano y el servicio en primer plano no cumple con uno de los casos excepcionales, el sistema lanza una IllegalStateException.

Si este cambio afecta a tu app, te recomendamos que comiences a usar WorkManager. Cuando se publique la versión beta de Android 12, WorkManager se convertirá en la solución recomendada para iniciar tareas en segundo plano con mayor prioridad.

WorkManager 2.7.0-alpha01 incluye compatibilidad con trabajos acelerados, que es un nuevo tipo de trabajo en Android 12. En Android 12 y versiones anteriores, esta versión de WorkManager usa servicios en primer plano para proporcionar retrocompatibilidad.

Para ver un ejemplo completo de cómo WorkManager 2.7.0-alpha01 usa trabajos acelerados, consulta WorkManagerSample en GitHub.

Trabajos acelerados

Los trabajos acelerados, que son nuevos en Android 12, permiten que las apps ejecuten tareas importantes, al tiempo que le otorgan al sistema un mejor control sobre el acceso a los recursos. Estos trabajos tienen un conjunto de características en algún lugar entre un servicio en primer plano y un trabajo de JobScheduler:

  • No se ven afectados por algunas de las restricciones de administración de energía del sistema, como el Ahorro de batería y Descanso.
  • El sistema las ejecuta de inmediato, siempre que la carga de trabajo actual del sistema permita hacerlo.

Los trabajos acelerados pueden postergarse

El sistema intenta ejecutar un trabajo acelerado determinado lo antes posible una vez que se invoca. Sin embargo, como sucede con otros tipos de trabajos, el sistema podría diferir el inicio de nuevos trabajos acelerados si hay demasiados trabajos en ejecución o si se están agotando los recursos del sistema.

En particular, el sistema aplaza la ejecución de trabajos acelerados cuando se produce al menos una de las siguientes condiciones:

  • La carga del sistema es demasiado alta.
  • Se superó el límite de cuota para trabajos acelerados. Los trabajos acelerados usan un sistema de cuotas basado en los buckets de App Standby y limitan el tiempo máximo de ejecución en un período de tiempo progresivo. Las cuotas que se usan para trabajos acelerados son más restrictivas que las que se usan para otros tipos de trabajos en segundo plano.

Actualizaciones de WorkManager

A partir de WorkManager 2.7.0-alpha01, tu app puede llamar a setExpedited() para declarar que se debe acelerar un Worker. Esta nueva API usa trabajos acelerados cuando se ejecuta en Android 12, y la API usa servicios en primer plano en versiones anteriores de Android.

Con el fin de alentar a los desarrolladores a realizar solicitudes de trabajos acelerados en sus apps de manera premeditada y respaldar mejor la capacidad para extender el tiempo en que una tarea puede ejecutarse, ya no están disponibles los métodos CoroutineWorker.setForeground() y ListenableWorker.setForegroundAsync(). En particular, en los dispositivos que ejecutan Android 12, cuando se intenta llamar a ListenableWorker.setForegroundAsync(), el resultado es IllegalStateException. Recomendamos a los desarrolladores usar setExpedited() en su lugar.

Casos en los que se permite el inicio de servicios en primer plano desde el segundo plano

En las siguientes situaciones, tu app puede iniciar servicios en primer plano incluso mientras se ejecuta en segundo plano:

El diálogo pregunta si el usuario desea permitir que una app se ejecute siempre en segundo plano. El cuadro de diálogo contiene 2 botones: Denegar y Permitir.
Figura 1: Diálogo del sistema que advierte a los usuarios que si se quita la optimización de batería, podría reducirse la duración de la batería del dispositivo