Android 9 (nivel de API 28) y versiones posteriores admiten intervalos de App Standby. Esta función ayuda al sistema a priorizar las solicitudes de recursos que hacen las apps según el momento y la frecuencia en que estas se usan. En función de los patrones de uso, se coloca cada una de las apps en uno de los cinco intervalos de prioridad. El sistema limita los recursos del dispositivo que están disponibles para cada app según el intervalo en el que estas se encuentran.
Intervalos de prioridad
El sistema asigna de forma dinámica cada app a un intervalo de prioridad y reasigna las apps según sea necesario. Por otra parte, el sistema puede depender de una app precargada que utiliza el aprendizaje automático para determinar la probabilidad de uso de cada app y asigna las apps a los intervalos apropiados. Si no está la app del sistema en el dispositivo, el sistema establece de forma predeterminada la clasificación de las apps en función de su uso reciente. Se asignan más apps activas a los intervalos que otorgan mayor prioridad a las apps, lo que hace que haya más recursos del sistema disponibles para estas. En particular, el intervalo determina con qué frecuencia se ejecutan los trabajos de la app y con qué frecuencia la app puede activar alarmas. Estas restricciones se aplican solo mientras el dispositivo funciona con batería; el sistema no impone estas restricciones a las apps cuando se está cargando el dispositivo.
Nota: Cada fabricante puede establecer sus propios criterios sobre cómo se asignan las apps no activas a los intervalos. No debes intentar influir en a qué intervalo se asigna tu app. En cambio, concéntrate en asegurarte de que tu app tenga un buen funcionamiento en cualquier intervalo en el que se encuentre. Tu app puede detectar en qué intervalo se encuentra llamando al método
UsageStatsManager.getAppStandbyBucket()
.
Los siguientes son los posibles intervalos:
- Activo: La app está en uso o se usó muy recientemente.
- Conjunto de tareas: Se está haciendo un uso habitual de la app.
- Frecuente: Se usa con frecuencia la app, pero no todos los días.
- Poco frecuente: No se usa con frecuencia la app.
- Restringido: La app consume una gran cantidad de recursos del sistema o puede mostrar un comportamiento no deseado.
Además, hay un intervalo especial nunca para la apps que se instalaron, pero que nunca se ejecutaron. El sistema impone restricciones severas a estas apps.
Nota: Las apps que se incluyen en la lista de exenciones de Descanso están exentas de las restricciones basadas en Intervalos de App Standby.
Nota: Las siguientes descripciones corresponden al caso no predictivo. Por el contrario, cuando se utiliza el aprendizaje automático para predecir el comportamiento, se eligen los intervalos antes de las próximas acciones del usuario, y no en función del uso reciente. Por ejemplo, una app que se usó recientemente podría terminar en un intervalo poco frecuente porque el aprendizaje automático predice que no se usará la app durante varias horas.
Activo
Una app está en el intervalo activo si el usuario la está usando o si la usó recientemente. Por ejemplo:
- La app inició una actividad.
- La app está ejecutando un servicio en primer plano.
- La app tiene un adaptador de sincronización asociado con un proveedor de contenido que es utilizado por una app en primer plano.
- El usuario hace clic en una notificación de la app.
Si una app está en el intervalo activo, el sistema no impone restricciones a los trabajos ni alarmas.
La interacción del usuario coloca las apps en el intervalo "activo"
En Android 9 (nivel de API 28) y versiones posteriores, cuando el usuario interactúa con tu app de ciertas maneras, el sistema la ubica temporalmente en el intervalo activo. Poco después de que el usuario deja de interactuar con tu app, el sistema la ubica en un intervalo según el historial de uso.
Entre los ejemplos de interacciones que activan este comportamiento del sistema, se incluyen los siguientes:
El usuario presiona una notificación que envía la app.
El usuario interactúa con un servicio en primer plano en tu app presionando un botón multimedia.
El usuario se conecta a tu app mientras interactúa con el SO Android Automotive, en el que tu app usa un servicio en primer plano o
CONNECTION_TYPE_PROJECTION
.
Conjunto de tareas
Una app está en el intervalo conjunto de tareas si se ejecuta con frecuencia, pero actualmente no está activa. Por ejemplo, es probable que una app de redes sociales que el usuario inicia casi todos los días esté en este intervalo. Las apps también se incluyen en el conjunto de tareas si se usan de manera indirecta.
Si una app está en el conjunto de tareas, el sistema impone restricciones leves en cuanto a su capacidad para ejecutar trabajos y activar alarmas. A fin de obtener más información, consulta Restricciones para la administración de batería.
Frecuente
Una app está en el intervalo frecuente si se usa con frecuencia, pero no necesariamente todos los días. Por ejemplo, se podría incluir en el intervalo frecuente una app de seguimiento de entrenamiento que el usuario ejecuta en el gimnasio.
Si una app se encuentra en el intervalo frecuente, el sistema impone restricciones más fuertes en cuanto a su capacidad para ejecutar trabajos y activar alarmas. A fin de obtener más información, consulta Restricciones para la administración de batería.
Poco frecuente
Una app está en el intervalo poco frecuente si no se usa con frecuencia. Por ejemplo, una app de un hotel que el usuario solo ejecuta mientras se aloja en ese hotel puede estar en un intervalo poco frecuente.
Si una app se encuentra en el intervalo poco frecuente, el sistema impone restricciones estrictas en cuanto a su capacidad para ejecutar trabajos y activar alarmas. Además, el sistema limita la capacidad de la app de conectarse a Internet. A fin de obtener más información, consulta Restricciones para la administración de batería.
Restringido
Este intervalo, que se agregó en Android 12 (nivel de API 31), tiene la prioridad más baja (y las restricciones más altas) de todos. El sistema considera el comportamiento de tu app, como la frecuencia con la que el usuario interactúa con ella, para decidir si colocará tu app en el intervalo restringido.
En Android 13 (nivel de API 33) y versiones posteriores, a menos que tu app cumpla con los requisitos para una exención, el sistema colocará la app en el intervalo restringido en las siguientes situaciones:
El usuario no interactúa con tu app durante una cantidad específica de días. En Android 12 (nivel de API 31) y 12L (nivel de API 32), la cantidad de días es de 45. Android 13 reduce este número a 8.
Tu app invoca una cantidad excesiva de transmisiones o vinculaciones durante un período de 24 horas.
Si el sistema coloca la app en el intervalo restringido, se aplican las siguientes restricciones:
- Puedes ejecutar trabajos una vez al día, en una sesión por lotes de 10 minutos. Durante esta sesión, el sistema agrupa los trabajos de la app con los trabajos de otras.
- Los trabajos restringidos no se ejecutan por sí mismos; debe haber al menos otro trabajo en ejecución o pendiente al mismo tiempo, lo que puede incluir cualquier otro trabajo.
- La app puede ejecutar menos trabajos acelerados, en comparación con el momento en el que el sistema la coloca en un intervalo menos restringido.
- Tu app puede invocar una alarma por día. Esta alarma puede ser una alarma exacta o una alarma inexacta.
Exenciones con respecto al acceso al intervalo restringido
Los siguientes tipos de apps están exentos de ingresar al intervalo "restringido" de App Standby y omiten el activador de inactividad, incluso en Android 12 y versiones posteriores:
- Apps de dispositivos complementarios
- Apps que se ejecuten en un dispositivo en modo de demostración
- Apps del propietario del dispositivo
- Apps del propietario del perfil
- Apps persistentes
- Apps de VPN
- Apps que tienen el rol
ROLE_DIALER
- Apps que el usuario designó de forma explícita para que brinden la funcionalidad "sin restricciones" en la configuración del sistema
- Apps que tienen widgets activos
- Apps visibles en el modo de pantalla en pantalla (PIP)
- Apps que están activas en la pantalla
- Apps que tienen al menos uno de los siguientes permisos:
Prácticas recomendadas
Si tu app ya sigue las prácticas recomendadas para Descanso y App Standby, no debería resultar difícil el manejo de las nuevas funciones de administración de batería. Sin embargo, el comportamiento de algunas apps que antes funcionaban bien ahora puede causar problemas.
- No intentes manipular el sistema para poner tu app en un solo intervalo. Los métodos de agrupamiento del sistema pueden cambiar, y cada fabricante de dispositivos puede diseñar su propia app de agrupamiento con su propio algoritmo. En cambio, debes asegurarte de que tu app se comporte de manera correcta, sin importar en qué intervalo se encuentre.
- Si una app no tiene una actividad de lanzamiento, es posible que nunca se incluya en el intervalo activo. Tal vez te convenga rediseñar tu app para tener esta actividad.
- Si las notificaciones de la app no son prácticas, los usuarios no podrán activar la inclusión de la app en el intervalo activo cuando interactúen con las notificaciones. En este caso, quizá te convenga rediseñar algunas notificaciones apropiadas para que permitan una respuesta del usuario. Para ver algunos lineamientos, consulta los patrones de diseño de las notificaciones de Material Design.
- Del mismo modo, si la app no muestra una notificación cuando recibe un mensaje de Firebase Cloud Messaging (FCM) de alta prioridad, no le dará al usuario la oportunidad de interactuar con la app ni incluirla en el intervalo activo. De hecho, el único uso previsto para los mensajes de FCM de alta prioridad es enviar una notificación al usuario, por lo que esta situación no debería ocurrir. En la versión 12L (nivel de API 32) y versiones anteriores, si marcas de forma inapropiada un mensaje de FCM como de prioridad alta cuando no activa la interacción del usuario, es posible que se anulen las prioridades en los mensajes futuros.
Nota: Si el usuario descarta una notificación en forma reiterada, el sistema le brinda la opción de bloquear esa notificación en el futuro. No envíes spam al usuario con notificaciones solo para tratar de mantener tu app en el intervalo activo.
- Si se dividen las apps en varios paquetes, estos pueden estar en diferentes intervalos y, por lo tanto, tener diferentes niveles de acceso. Asegúrate de probar esas apps con los paquetes asignados a varios intervalos a fin de garantizar que la app se comporte correctamente.
Prueba
Para comprobar el intervalo en el que se colocó tu app, realiza una de las siguientes acciones:
- Llama a
getAppStandbyBucket()
. -
En una ventana de terminal, ejecuta el siguiente comando:
adb shell am get-standby-bucket PACKAGE_NAME
El sistema limita la app cada vez que se coloca en un intervalo de App Standby cuyo valor es mayor que STANDBY_BUCKET_ACTIVE
(10).