Cómo optimizar tu app para Descanso y App Standby

Android tiene dos funciones de ahorro de energía que extienden la duración de batería de los usuarios Administrar el comportamiento de las aplicaciones cuando un dispositivo no está conectado a una fuente de alimentación: Descanso y App Standby. La función Descanso disminuye el consumo de batería aplazando Actividad de red y CPU en segundo plano para apps cuando el dispositivo no se usa durante mucho tiempo períodos de tiempo. La función App Standby aplaza la actividad de red en segundo plano de apps sin actividad reciente del usuario.

Cuando el dispositivo esté en Descanso, las apps acceso a ciertas aplicaciones que consuman recursos se posponen hasta el período de mantenimiento. Las restricciones específicas se enumeran en Administración de energía restricciones de uso.

Descanso y App Standby administran el comportamiento de todas las apps que se ejecutan en Android 6.0 o versiones posteriores, independientemente de si se orientan específicamente al nivel de API 23. Para garantizar la mejor experiencia para los usuarios, prueba tu app en los modos Descanso y App Modos en espera y realiza los ajustes necesarios en el código. Lo siguiente proporcionan detalles.

Información sobre el modo Descanso

Si un usuario deja un dispositivo desconectado y quieto durante un período de tiempo, con apaga la pantalla, el dispositivo entra en el modo Descanso. En el modo Descanso, el sistema intenta para ahorrar batería al restringir las apps acceso a cargas de trabajo de uso intensivo de Google Cloud. También evita que las apps accedan a la red y aplaza sus tareas de configuración, sincronizaciones y alarmas estándar.

De forma periódica, el sistema desactiva el modo Descanso durante un tiempo breve para permitir que las apps se completen sus actividades aplazadas. Durante este período de mantenimiento, el sistema ejecuta todas las sincronizaciones, trabajos y alarmas pendientes, y permite que las apps accedan a la red.

Figura 1: Descanso proporciona un período de mantenimiento recurrente para apps para usar la red y controlar actividades pendientes.

Cuando finaliza el período de mantenimiento, el sistema vuelve a entrar en Descanso, suspender el acceso a la red y aplazar tareas, sincronizaciones y alarmas. Con el tiempo, la programa los períodos de mantenimiento con menos frecuencia, lo que ayuda a reducir la batería en casos de inactividad prolongada cuando el dispositivo no se está cargando.

Cuando el usuario activa el dispositivo moviéndolo, encendiendo la pantalla o conectando un cargador, el sistema desactiva el modo Descanso y todas las aplicaciones se reanudan con normalidad. actividad.

Restricciones del modo Descanso

Durante el modo Descanso, el sistema aplica las siguientes restricciones a tus apps:

Lista de comprobación del modo Descanso

Cómo adaptar tu app a Descanso

El modo Descanso puede afectar a las apps de diferentes maneras, según las capacidades que ofrezcan. y los servicios que usan. Muchas apps funcionan con normalidad durante los ciclos de Descanso sin modificaciones. En algunos casos, debes optimizar la forma en que tu app administra la red, las alarmas, las tareas y las sincronizaciones. Las apps deben poder mostrar administrar actividades durante cada período de mantenimiento.

Para programar alarmas, puedes usar dos AlarmManager métodos: setAndAllowWhileIdle() y setExactAndAllowWhileIdle() Con estos métodos, puedes establecer alarmas que se activan incluso si el dispositivo está en Descanso.

.

Es probable que la restricción de acceso a la red de Descanso también afecte a tu app, especialmente si la app depende de mensajes en tiempo real, como cosquillas o notificaciones. Si tu app requiere una conexión persistente a la red para recibes mensajes, usa Firebase Cloud Messaging (FCM) si como sea posible.

Para confirmar que tu app se comporte según lo esperado con el modo Descanso, puedes usar Comandos adb para forzar al sistema a activar y desactivar los modos Descanso y observar el comportamiento de tu app. Para obtener más información, consulta Cómo realizar pruebas con los modos Descanso y App Standby

Información sobre App Standby

La función App Standby permite que el sistema determine si una app está inactiva cuando el usuario no está activa. lo usan activamente. El sistema hace esta determinación cuando el usuario no tocar la app durante un período determinado y ninguna de las siguientes condiciones aplica:

  • El usuario inicia explícitamente la app.
  • La app tiene un proceso actualmente en primer plano, ya sea como una actividad o en primer plano, o en uso por parte de otra actividad o servicio en primer plano.
  • La app genera una notificación que los usuarios ven en la pantalla de bloqueo o en la bandeja de notificaciones.

Cuando el usuario enchufa el dispositivo a una fuente de alimentación, el sistema libera las apps del estado en espera, lo que les permite acceder libremente a la red y ejecutar trabajos y sincronizaciones pendientes. Si el dispositivo permanece inactivo durante largos períodos, el permite que las apps inactivas accedan a la red aproximadamente una vez al día.

Usa FCM para interactuar con tu app mientras el dispositivo está inactivo

Firebase Cloud La mensajería (FCM) es un servicio de nube a dispositivo que te permite brindar asistencia en tiempo real mensajería descendente entre servicios de backend y apps en dispositivos Android. FCM proporciona una conexión única y persistente a la nube. Todas las apps que necesiten la mensajería en tiempo real puede compartir esta conexión. Esta conexión compartida optimiza significativamente el consumo de batería al eliminar la necesidad varias apps para mantener sus propias conexiones persistentes independientes, que pueden la batería se agota rápidamente. Por este motivo, si tu app requiere integración con un servicio de backend, te recomendamos que uses FCM si como sea posible, en lugar de mantener su propia conexión de red persistente.

FCM está optimizado para funcionar con los modos inactivos Descanso y App Standby. FCM Los mensajes de alta prioridad te permiten activar tu app para atraer al usuario. En los modos Descanso o App En modo de espera, el sistema entrega el mensaje y otorga a la app acceso temporal a servicios de red y bloqueos de activación parciales, y luego devuelve el dispositivo o la app inactivo. En el caso de las notificaciones urgentes y visibles para el usuario, considera usar alta los mensajes prioritarios para habilitar la entrega en el modo Descanso. Los mensajes de prioridad alta también generan notificaciones. Consulta FCM orientación sobre los mensajes de alta prioridad para obtener más información.

Para los mensajes que no generan notificaciones, como mantener el contenido de la app estar actualizada en segundo plano o iniciar sincronizaciones de datos, usa FCM de prioridad normal mensajes nuevos. Los mensajes de prioridad normal se entregan de inmediato si el dispositivo no está conectado. en Descanso. Si el dispositivo está en modo Descanso, se entregan durante la fase Descanso del período de mantenimiento o en cuanto el usuario activa el dispositivo.

Como práctica recomendada general, si tu app requiere mensajería descendente, usa FCM Si tu app ya usa FCM, asegúrate de que incluya mensajes de alta prioridad solo para los mensajes que den como resultado notificaciones para el usuario.

Compatibilidad con otros casos prácticos

Casi todas las aplicaciones admiten el modo Descanso a través de la administración de la conectividad de red, alarmas, tareas y sincronizaciones, y el uso de mensajes de FCM. Para un conjunto reducido de usos esto podría no ser suficiente. Para tales casos, el sistema proporciona una lista configurable de apps que están parcialmente exentas de Descanso y App Standby optimizaciones.

Una app que está parcialmente exenta puede usar la red y conservar la activación parcial bloqueos durante los modos Descanso y App Standby. Sin embargo, se aplican otras restricciones del mismo modo que con otras apps. Por ejemplo, las tareas y sincronizaciones de la app se aplazan hasta el nivel de API 23, y sus valores regulares Las alarmas AlarmManager no se activan. Una app puede comprobar si que actualmente se encuentran en la lista de exenciones llamando isIgnoringBatteryOptimizations()

Los usuarios pueden configurar manualmente la lista de apps exentas en Configuración > Batería > Optimización de la batería De manera alternativa, el sistema Ofrece a las apps alternativas para solicitar a los usuarios que las eximen:

Para comprobar si se encuentra en la lista de exenciones, una app puede llamar a isIgnoringBatteryOptimizations()

Cómo realizar pruebas con los modos Descanso y App Standby

Para garantizar una excelente experiencia del usuario, prueba tu app por completo en el modo Descanso y App Standby.

Prueba tu app con el modo Descanso

Para probar el modo Descanso, haz lo siguiente:

  1. Configurar un dispositivo de hardware o virtual con Android 6.0 (API nivel 23) o una imagen del sistema posterior.
  2. Conecta el dispositivo a tu equipo de desarrollo e instala tu app.
  3. Ejecuta tu app y déjala activa.
  4. Ejecuta el siguiente comando para forzar el modo de inactividad en el sistema:
        $ adb shell dumpsys deviceidle force-idle
        
  5. Cuando esté todo listo, ejecuta el siguiente comando para salir del modo de inactividad:
        $ adb shell dumpsys deviceidle unforce
        
  6. Ejecuta el siguiente comando para volver a activar el dispositivo:
        $ adb shell dumpsys battery reset
        
  7. Observa el comportamiento de tu app después de reactivar el dispositivo. Marca asegúrate de que se recupere correctamente cuando el dispositivo salga del modo Descanso.

Cómo probar tu app con App Standby

Para probar el modo App Standby con tu app, haz lo siguiente:

  1. Configurar un dispositivo de hardware o virtual con Android 6.0 (API nivel 23) o una imagen del sistema posterior.
  2. Conecta el dispositivo a tu equipo de desarrollo e instala tu app.
  3. Ejecuta tu app y déjala activa.
  4. Ejecuta los siguientes comandos para forzar el modo App Standby en la app:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. Simula la activación de tu app con los siguientes comandos:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. Observa el comportamiento de tu app después de activarla. Asegúrate de que la app se recupera correctamente del modo en espera. En particular, comprueba si la configuración las notificaciones y los trabajos en segundo plano funcionan como se espera.

Casos de uso aceptables para la exención

En la siguiente tabla, se destacan varios casos de uso y se indica si son aceptables para que las apps usen la ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS acción de intent en estas situaciones. En general, tu app no cumple con estas excepciones, a menos que Descanso o App Standby interrumpa la función principal de la app o hay una razón técnica por la que tu app no puede usar la prioridad alta de FCM mensajes nuevos.

Para obtener más información, consulta Asistencia para otros casos de uso.

Tipo Caso de uso ¿Puede usar FCM? ¿Se acepta una exención? Notas
App de mensajería instantánea, chat o llamadas Requiere entregar mensajes en tiempo real a los usuarios mientras el dispositivo está en modo Descanso o la app está en modo App Standby. Sí, usa FCM. No Usa los mensajes de prioridad alta de FCM para activar la app y acceder a ella la red.
Sí, pero no usa los mensajes de prioridad alta de FCM.
App de mensajería instantánea, chat o llamadas apps de VoIP empresariales. No, no puedo usar FCM debido a una dependencia técnica de otro mensaje. o Descanso y App Standby dañan la función principal de la app. Aceptable
App de Seguridad. Aplicaciones que protegen a sus usuarios y familias Si corresponde: Aceptable
App de automatización de tareas. La función principal de la app es programar acciones automatizadas, como las apps las apps de mensajería, las llamadas de voz o la nueva administración de fotos. Si corresponde: Aceptable
Aplicación complementaria para dispositivos periféricos. La función principal de la app es mantener una conexión persistente con el dispositivo periférico con el fin de proporcionar dicho dispositivo acceso a Internet. Si corresponde: Aceptable
La app solo necesita conectarse a un dispositivo periférico de manera periódica para sincronizarse o si solo necesita conectarse a dispositivos, como auriculares inalámbricos, conectados a través de perfiles Bluetooth estándar. Si corresponde: No