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 consumen mucha batería 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.
![](https://developer.android.google.cn/static/images/training/doze.png?authuser=3&hl=es-419)
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:
- Suspende el acceso a la red.
- Ignora la activación y bloqueos.
- Difiere el estándar
AlarmManager
alarmas, inclusosetExact()
ysetWindow()
, al siguiente período de mantenimiento.- Si necesitas establecer alarmas que se activen durante el modo Descanso, usa
setAndAllowWhileIdle()
osetExactAndAllowWhileIdle()
- Alarmas establecidas con
setAlarmClock()
continúan activándose normalmente. El sistema desactiva el modo Descanso momentos antes de que se activan las alarmas.
- Si necesitas establecer alarmas que se activen durante el modo Descanso, usa
- No realiza búsquedas de Wi-Fi.
- No permite que se ejecuten los adaptadores de sincronización.
- No permite
JobScheduler
cuando se ejecute.
Lista de comprobación del modo Descanso
- Si es posible, usa Firebase Cloud Messaging (FCM) para downstream mensajería.
- Si los usuarios deben ver una notificación de inmediato, utiliza una Mensaje de prioridad alta de FCM. Usar prioridad alta solo para los mensajes que resulten en una notificación. Para obtener más orientación, consulta FCM documentación sobre la prioridad de los mensajes para Android
- Proporciona suficiente información en el mensaje inicial útil, por lo que no será necesario acceder a la red posteriormente.
- Establece alarmas críticas con
setAndAllowWhileIdle()
ysetExactAndAllowWhileIdle()
- Prueba tu app en el 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 pueden admitir 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:
- La mayoría de las apps pueden invocar un intent que contiene la
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
- Apps que satisfacen un caso de uso aceptable
puede invocar un intent que contiene el
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
acción de intent para que el usuario agregue la app a la lista de exenciones directamente sin ir a la configuración del sistema.
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:
- Configurar un dispositivo de hardware o virtual con Android 6.0 (API nivel 23) o una imagen del sistema posterior.
- Conecta el dispositivo a tu equipo de desarrollo e instala tu app.
- Ejecuta tu app y déjala activa.
- Ejecuta el siguiente comando para forzar el modo de inactividad en el sistema:
$ adb shell dumpsys deviceidle force-idle
- Cuando estés listo, ejecuta el siguiente comando para salir del modo de inactividad:
$ adb shell dumpsys deviceidle unforce
- Ejecuta el siguiente comando para volver a activar el dispositivo:
$ adb shell dumpsys battery reset
- 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:
- Configurar un dispositivo de hardware o virtual con Android 6.0 (API nivel 23) o una imagen del sistema posterior.
- Conecta el dispositivo a tu equipo de desarrollo e instala tu app.
- Ejecuta tu app y déjala activa.
- 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
- Simula la activación de tu app con los siguientes comandos:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- 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 |