Android 9 (nivel de API 28) presenta características nuevas para mejorar la administración de energía del dispositivo. Estos cambios, sumados a características que ya estaban en las versiones previas, garantizan que se proporcionen los recursos de sistema a las apps que más los necesitan.
Las características de administración de energía se pueden clasificar en dos categorías:
- App Standby Buckets
- El sistema limita el acceso de las apps a los recursos de los dispositivos, como el CPU o la batería, según los patrones de uso del usuario. Esta es una característica nueva para Android 9.
- Mejoras en el ahorro de batería
- Cuando se activa el ahorro de batería, el sistema impone restricciones en todas las apps. Esta es una característica existente que se mejoró con Android 9.
Nota: Estos cambios se aplican a todas las apps, estén o no orientadas a Android 9.
App Standby Buckets
Android 9 presenta una característica nueva de administración de batería: App Standby Buckets. App Standby Buckets ayuda al sistema a priorizar las solicitudes de las apps para recursos según la frecuencia de uso de las apps o el tiempo que transcurre entre una y otra aplicación de estas. Según los patrones de uso de las apps, cada una se ubica en uno de los cinco depósitos de prioridad. El sistema limita los recursos del dispositivo disponibles para cada app según el depósito en el que esta se encuentre.
Los cinco depósitos priorizan las apps por grupos según las siguientes características:
- Activas
Una app se encuentra en el depósito de activas si el usuario la está usando. Por ejemplo:
- La app lanza una actividad.
- La app ejecuta un servicio en primer plano.
- La app tiene un adaptador de sincronización asociado con un proveedor de contenido usado por una app en primer plano.
- El usuario hace clic en una notificación desde la app.
Si una app se encuentra en el depósito de activas, el sistema no impone restricciones en los trabajos, las alarmas o los mensajes de FCM de esta.
- Espacio de trabajo
Una app se ubicará en el depósito del espacio de trabajo si se ejecuta a menudo, pero no está activa actualmente. Por ejemplo, la mayoría de las veces que el usuario inicie una app de redes sociales es probable que se encuentre en el espacio de trabajo. Las apps también se transfieren al depósito del espacio de trabajo si se usan de manera indirecta.
Si una app está en el espacio de trabajo, el sistema impone restricciones leves en su capacidad de ejecutar tareas y activar alarmas. Para obtener información detallada, consulta Restricciones de administración de energía.
- Frecuentes
Una app se encuentra en el depósito de frecuentes si se usa de manera regular. Esto no necesariamente implica que suceda todos los días. Por ejemplo, una app de seguimiento de entrenamiento que el usuario ejecuta en el gimnasio puede estar en el depósito de frecuentes.
Si una app se encuentra en el depósito de frecuentes, el sistema impone restricciones más estrictas sobre su capacidad para ejecutar trabajos y activar alarmas, y también impone una restricción en los mensajes de FCM de alta prioridad. Para obtener información detallada, consulta Restricciones de administración de energía.
- Poco frecuentes
Una app se encuentra en el depósito de poco frecuentes si no se usa a menudo. Por ejemplo, una app de hotel que el usuario solo ejecuta mientras permanece en el hotel podría estar en este depósito.
Si una app se encuentra en el depósito de poco frecuentes, el sistema impone restricciones estrictas sobre su capacidad para ejecutar trabajos, activar alarmas y recibir mensajes de FCM de alta prioridad. El sistema también limita la capacidad de la app para conectarse a Internet. Para obtener información detallada, consulta Restricciones de administración de energía.
- Nunca ejecutadas
Las apps instaladas y nunca ejecutados se asignan al depósito de las nunca ejecutadas. El sistema impone restricciones severas sobre estas apps.
El sistema asigna dinámicamente cada app a un depósito de prioridades y las reasigna según sea necesario. El sistema puede confiar en una app previamente cargada que use aprendizaje automático para determinar la probabilidad de que se use cada una de las apps y asigna estas a los depósitos correspondientes. Si la app del sistema no está en un dispositivo, el sistema clasifica de forma predeterminada las apps según el uso que hayan tenido recientemente. Las apps más activas se asignan a los depósitos que dan una mayor prioridad a las apps y así aumentan la disponibilidad de recursos de sistema para la app. En especial, el depósito determina la frecuencia de ejecución de los trabajos de la app, la frecuencia con que la app puede activar alarmas y la frecuencia con que la app puede recibir mensajes de Firebase Cloud Messaging (FCM) de alta prioridad. Estas restricciones se aplican solo cuando el dispositivo recibe energía de la batería, el sistema no impone estas restricciones en las apps mientras el dispositivo se carga.
Cada fabricante puede establecer sus propios criterios respecto de cómo se
asignan las apps no activas a los depósitos. No debes intentar influir sobre la asignación del depósito
para tu app. En lugar de ello, concéntrate en asegurarte de que el comportamiento de tu app sea bueno en cualquier
depósito en el que se encuentre. Tu app puede determinar el depósito en el que se encuentra
llamando al método nuevo
UsageStatsManager.getAppStandbyBucket()
.
Nota: Las apps que se encuentren en la lista blanca de Descanso quedan exentas de las restricciones basadas en App Standby Buckets.
Prácticas recomendadas
Si tu app ya sigue las mejores prácticas para Descanso y App Standby, controlar las características nuevas de la administración de energía no debería ser difícil. Sin embargo, algunos comportamientos de la app que previamente funcionaron bien ahora podrían causar problemas.
- No intentes manipular el sistema incluyendo tu app en un depósito o en otro. Los métodos de creación de depósitos del sistema pueden cambiar y todos los fabricantes de dispositivos pueden optar por escribir su propia app de depósitos con su propio algoritmo. Como alternativa, asegúrate de que tu app se comporte de manera apropiada sin importar el depósito en el que se encuentre.
- Si una app no tiene una actividad de lanzamiento, tal vez nunca se transfiera al depósito de activas. Tal vez desees volver a diseñar tu app para contar una actividad de estas características.
- Si las notificaciones de la app no son productivas, los usuarios no podrán activar la transferencia de la app al depósito activo interactuando con las notificaciones. En este caso, tal vez quieras volver a diseñar algunas notificaciones correspondientes para que permitan una respuesta del usuario. Para obtener algunas pautas, consulta los Patrones de diseño de notificaciones de Material Design.
Asimismo, si la app no muestra una notificación al recibir un mensaje de FCM de alta prioridad, no dará al usuario la oportunidad de interactuar con la app y por lo tanto la transferirá al depósito activo. De hecho, el único uso previsto para los mensajes FCM de alta prioridad consiste en enviar una notificación al usuario para que esta situación nunca ocurra. Si de forma inapropiada aplicas a un mensaje de FCM la marca de alta prioridad cuando no genera interacción por parte del usuario, puede haber otras consecuencias negativas; por ejemplo, puede agotar la cuota de tu app, lo cual haría que los mensajes de FCM se trataran como si tuvieran prioridad normal.
Nota: Si el usuario descarta reiteradamente una notificación, el sistema le ofrece la opción de bloquear dicha notificación en el futuro. No recargues al usuario con notificaciones por el mero propósito de mantener tu app en el depósito de activas.
Si las apps se dividen en varios paquetes, estos últimos pueden hallarse en diferentes depósitos y, por lo tanto, tener diferentes niveles de acceso. Debes asegurarte de probar esas apps con los paquetes asignados a diversos depósitos para asegurarte de que estas se comporten de manera adecuada.
Mejoras en el ahorro de batería
En Android 9 se introducen varias mejoras en el modo de ahorro de batería. El fabricante del dispositivo determina las restricciones precisas que se imponen. Por ejemplo, en compilaciones de AOSP, el sistema aplica las siguientes restricciones:
- El sistema pone las apps en el modo de espera de forma más agresiva, en lugar de esperar que queden inactivas.
- Se aplican límites de ejecución en segundo plano a todas las apps, sin importar su nivel de API.
- Los servicios de ubicación pueden inhabilitarse cuando la pantalla está apagada.
- Las apps en segundo plano no tienen acceso a redes.
A su vez, existen otras optimizaciones de energía específicas para dispositivos. Para obtener información completa, consulta Apéndice: Restricciones de administración de energía.
Como siempre, te recomendamos probar tu app mientras esté activo el ahorro de batería. Puedes activar manualmente el ahorro de batería desde la pantalla Settings > Battery Saver.
Pruebas y solución de problemas
Las nuevas características de administración de energía afectan a todas las apps en dispositivos Android 9, estén estas o no orientadas a Android 9. Es importante asegurarse de que tu app se comporte de manera correcta en estos dispositivos.
Asegúrate de probar los casos de uso principales de tu app en diferentes condiciones para ver la manera en que las características de administración de energía interactúan entre sí. Puedes utilizar comandos de Android Debug Bridge para activar y desactivar algunas de las características.
Comandos de Android Debug Bridge
Puedes utilizar comandos shell de Android Debug Bridge para probar varias de las características de administración de energía.
Si quieres obtener información sobre cómo utilizar ADB para activar Descanso en tu dispositivo, consulta Pruebas con Descanso y App Standby.
App Standby Buckets
Te recomendamos usar ADB para asignar manualmente tu app a un App Standby Bucket. Para modificar el depósito de una app, utiliza el siguiente comando:
$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare
También puedes usar ese comando para configurar varios paquetes a la vez:
$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...
Para verificar el depósito en el que se encuentra una app, ejecuta
$ adb shell am get-standby-bucket [packagename]
Si no pasas un parámetro packagename, el comando lista los
depósitos para todas las apps. Una app también puede identificar su depósito en el tiempo de ejecución llamando al
nuevo método
UsageStatsManager.getAppStandbyBucket()
.
Ahorro de batería
Existen varios comandos para probar la manera en que se comporta tu app en condiciones de bajo nivel de batería.
Nota: También puedes recurrir a la pantalla Settings > Battery saver del dispositivo para activar su modo de ahorro de batería.
Para simular la desconexión del dispositivo de la corriente, usa el comando
$ adb shell dumpsys battery unplug
Para probar la manera en que se comporta el dispositivo en condiciones de bajo nivel de batería, usa este comando:
$ adb shell settings put global low_power 1
Una vez que hayan concluido tus pruebas, puedes deshacer tus ajustes manuales para el dispositivo con este comando:
$ adb shell dumpsys battery reset
“Apéndice: Restricciones de administración de energía”