Administración de energía

Android 9 (nivel de API 28) presenta características nuevas para mejorar la administración de energía del dispositivo. Estos cambios, junto con funciones que ya estaban presentes en versiones anteriores, ayudan a para garantizar que se proporcionen recursos del 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:

Intervalos de App Standby
El sistema limita la carga de las apps acceso a recursos de dispositivos, como CPU o batería, según los patrones de uso del usuario. Esta es una función nueva para Android 9
Mejoras en el Ahorro de batería
Cuando el ahorro de batería está activado, la el sistema impone restricciones en todas las apps. Esta es una función existente que está mejorado con Android 9.

Intervalos de App Standby

Android 9 presenta una característica nueva de administración de batería: App Standby Buckets. Esta función ayuda al sistema a priorizar la latencia de las apps las solicitudes de recursos basadas de uso de las aplicaciones desde hace poco y con qué frecuencia. Según el uso de la app de prioridad, cada app se ubica en uno de los cinco grupos de prioridad. El sistema limita los recursos del dispositivo que están disponibles para cada app en función del intervalo en el que estas estén en la nube.

Los cinco depósitos priorizan las apps por grupos según las siguientes características:

Activo

Una app está en el intervalo activo si el usuario la está usando actualmente 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 utilizado por un 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 al los trabajos, las alarmas o los mensajes de FCM de la app.

Conjunto de tareas

Una app se encuentra en el intervalo del conjunto de tareas si se ejecuta con frecuencia, pero actualmente no lo está activo. Por ejemplo, una app de redes sociales que el usuario inicia casi todos los días que probablemente estén en el escenario de trabajo. Las apps también se incluyen en el conjunto de tareas. bucket si se usan de forma 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. Para obtener más información, consulta Restricciones para la administración de batería:

Frecuente

Una app está en el bucket frecuente si se usa con frecuencia, pero no necesariamente todos los días. Por ejemplo, se podría incluir en el bucket 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 su capacidad para ejecutar trabajos y activar alarmas, y también impone un límite mensajes de FCM de alta prioridad. Para obtener más información, consulta Restricciones para la administración de batería:

Poco frecuente

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 corra mientras se aloja en ese hotel puede ser un bucket.

Si una app se encuentra en el intervalo poco frecuente, el sistema impone restricciones estrictas en su capacidad para ejecutar trabajos, activar alarmas y recibir mensajes de FCM de alta prioridad. Además, el sistema limita la capacidad de la app de conectarse a Internet. Para consulta Restricciones para la administración de batería.

Nunca

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 intervalo de prioridad y reasigna la apps según sea necesario. El sistema puede depender de una app precargada que usa máquinas aprendiendo para determinar la probabilidad de que cada qué app se usará y asigna las apps a los segmentos adecuados. Si el sistema no está presente en el dispositivo, el sistema establece de forma predeterminada el orden de las aplicaciones según qué tan recientemente se utilizaron. Se asignan más apps activas a los intervalos que darles mayor prioridad a las aplicaciones, lo que más recursos del sistema disponibles para la app. En particular, el bucket determina la frecuencia con la que se ejecutan los trabajos de la app, la frecuencia con la que esta puede activarse alarmas y la frecuencia con la que la app puede recibir alertas de Firebase Cloud Mensajes de (FCM) Estas restricciones se aplican solo mientras el dispositivo funciona con batería. el sistema no impone estas restricciones en las apps mientras se carga el dispositivo.

Cada fabricante puede establecer sus propios criterios sobre el nivel de inactividad de las apps asignados a buckets. No debes intentar influir en la ubicación de tu app a la que están asignados. En lugar de eso, concéntrate en asegurarte de que tu app se comporte bien del bucket en el que se encuentre. Tu app puede averiguar en qué intervalo se encuentra actualmente mediante Llamando al método nuevo UsageStatsManager.getAppStandbyBucket()

Prácticas recomendadas

Si tu app ya sigue las prácticas recomendadas para Descanso y App Standby, el manejo de las nuevas funciones de administración de energía no debería ser difícil. Sin embargo, algunos comportamientos de las apps que antes funcionaban bien ahora pueden causar problemas.

  • No intentes manipular el sistema para que coloque tu app en un solo bucket con el otro. Los métodos de agrupamiento del sistema pueden cambiar, y cada dispositivo del fabricante podría optar por escribir su propia aplicación de agrupamiento con una de codificador-decodificador. En cambio, debes asegurarte de que tu app se comporte de manera correcta, sin importar en qué bucket se encuentre.
  • Si una app no tiene una actividad de inicio, es posible que nunca se incluya en el bucket activo. Recomendamos que rediseñes tu app para que ofrezca un actividad.
  • Si las notificaciones de la app no son prácticas, los usuarios no podrán activar la promoción de la app al intervalo activo interactuando con las notificaciones. En en este caso, quizás le convenga rediseñar algunas notificaciones apropiadas para que le permitan una respuesta del usuario. Para ver algunas pautas, consulta el Diseño de notificaciones de Material Design patrones.
  • Del mismo modo, si la app no muestra una notificación cuando recibe una mensaje de FCM de alta prioridad, no le dará al usuario la oportunidad de interactuar con la aplicación y, por lo tanto, promocionarla del bucket 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 nunca debería ocurrir. Si marcar de forma inapropiada un mensaje de FCM como de prioridad alta cuando no se activa la interacción del usuario, puede causar otras consecuencias negativas. por ejemplo, puede provocar que tu app agote su cuota, lo que provoca Los mensajes de FCM se tratarán con prioridad normal.

    Nota: Si el usuario descarta una notificación en forma reiterada, la sistema le da al usuario 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 la bucket activo.

  • Si se dividen las apps en varios paquetes, estos podrían estar en buckets diferentes y, por lo tanto, tener distintos niveles de acceso. Debes asegurarte de prueba estas apps con los paquetes asignados a varios buckets para asegurarte de que la que la app se comporte correctamente.

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 Para las compilaciones de AOSP, el sistema aplica las siguientes restricciones:

  • El sistema pone las apps en modo App Standby de manera más agresiva, en lugar de esperando a que la app esté inactiva.
  • Se aplican límites de ejecución en segundo plano a todas las apps, independientemente de su API objetivo a nivel de organización.
  • Los servicios de ubicación pueden inhabilitarse cuando la pantalla está apagada.
  • Las apps que se ejecutan en segundo plano no tienen acceso a la red.

A su vez, existen otras optimizaciones de energía específicas para dispositivos. Total consulta la página que describe la administración de energía restricciones de uso.

Como siempre, te recomendamos probar tu app mientras el Ahorro de batería esté activo. Tú puedes activar manualmente el ahorro de batería en la Configuración > Batería Ahorro.

Prueba y solución de problemas

Las nuevas funciones de administración de batería afectan a todas las apps que se ejecuten en dispositivos con Android 9, ya sea si las apps se orientan a Android 9 o no. Es importante que te asegures de que tu app funcione correctamente correctamente en estos dispositivos.

Asegúrate de probar los principales casos de uso de tu app en diferentes condiciones para ver cómo interactúan entre sí las funciones de administración de energía. Puedes usar Android Debug Bridge para desactivar algunas de las funciones activadas y desactivadas.

Comandos de Android Debug Bridge

Puedes usar los comandos de shell de Android Debug Bridge. para probar varias de las funciones de administración de energía.

Si quieres obtener información sobre cómo usar ADB para activar el modo Descanso de tu dispositivo, consulta Pruebas con los modos Descanso y App Standby.

Intervalos de App Standby

Con App Standby, puedes asignar manualmente tu app a un intervalo de esta función. Para cambiar el intervalo de una app, usa 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 comprobar en qué intervalo se encuentra una app, ejecuta lo siguiente:

$ adb shell am get-standby-bucket [packagename]

Si no pasas un parámetro de packagename (nombre de paquete), el comando enumerará los intervalos de todas las apps. Una app también puede identificar su intervalo en el tiempo de ejecución llamando el 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.

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 hayas finalizado la prueba, puedes deshacer la configuración manual del dispositivo con este comando:

$ adb shell dumpsys battery reset