Para mejorar la duración de la batería del dispositivo, Android puede afectar el estado del dispositivo al monitorear el uso y la vigilia del dispositivo. La plataforma puede entrar en un estado de suspensión para pausar la ejecución de actividades mientras el dispositivo no está en uso.
Dormitar
Doze extiende la duración de la batería al diferir la actividad de la red y la CPU en segundo plano de la aplicación cuando un dispositivo no se usa durante períodos prolongados.
Los dispositivos inactivos en Doze entran periódicamente en una ventana de mantenimiento, durante la cual las aplicaciones pueden completar el trabajo pendiente (sincronizaciones, trabajos, etc.). Luego, Doze reanuda el sueño por un período de tiempo más largo, seguido de otra ventana de mantenimiento. La plataforma continúa con la secuencia de suspensión/mantenimiento Doze, aumentando la duración de la inactividad cada vez, hasta alcanzar un máximo de unas pocas horas de suspensión. En todo momento, un dispositivo en Doze permanece al tanto del movimiento e inmediatamente sale de Doze si detecta movimiento.
Android 7.0 y versiones posteriores amplían Doze para activar un conjunto más ligero de optimizaciones cada vez que un usuario apaga la pantalla del dispositivo, incluso cuando el usuario continúa moviéndose, lo que permite una mayor duración de la batería.
Los fabricantes de dispositivos generalmente configuran los servicios críticos del sistema para que estén exentos de Doze. Los usuarios también pueden eximir aplicaciones específicas de Doze usando el menú Configuración. Sin embargo, las aplicaciones exentas pueden provocar que se agote la batería del dispositivo. De forma predeterminada, Doze está deshabilitado en AOSP; para obtener detalles sobre cómo habilitar Doze, consulte Integración de Doze .
Requisitos para dormir
La compatibilidad con Doze requiere que el dispositivo tenga un servicio de mensajería en la nube, como Firebase Cloud Messaging (FCM) . Los eventos desencadenantes externos, como los mensajes en la nube, pueden activar temporalmente las aplicaciones para que funcionen mientras el dispositivo permanece en modo Doze.
La compatibilidad con Full Doze también requiere un detector de movimiento significativo (SMD) en el dispositivo; sin embargo, el modo Doze liviano en Android 7.0 y superior no requiere un SMD. Si Doze está habilitado en un dispositivo que:
- Tiene un SMD, se producen optimizaciones completas de Doze (incluye optimizaciones ligeras).
- No tiene un SMD, solo se producen las optimizaciones ligeras de Doze.
Doze ciclo de vida
Doze comienza cuando la plataforma detecta que el dispositivo está inactivo y finaliza cuando se producen una o más actividades de criterios de salida.
Detección
La plataforma detecta que un dispositivo está inactivo cuando:
- El dispositivo está estacionario (usando SMD).
- La pantalla del dispositivo está apagada durante un tiempo.
El modo Doze no se activa mientras un dispositivo alimentado por batería está conectado a un cargador de energía.
durante la siesta
La plataforma intenta mantener el sistema en un estado de suspensión, reanudando periódicamente las operaciones normales durante una ventana de mantenimiento y luego devolviendo el dispositivo a la suspensión por períodos repetitivos más largos. Durante el sueño, las siguientes restricciones están activas:
- Las aplicaciones no tienen permitido el acceso a la red.
- Wakelocks de aplicaciones ignorados.
- Se aplazan las alarmas. Se excluyen las alarmas del reloj despertador y las alarmas configuradas mediante
setAndAllowWhileIdle()
(limitado a 1 cada 15 minutos por aplicación mientras está en Doze). Esta exención está destinada a aplicaciones (como Calendario) que deben mostrar notificaciones de recordatorio de eventos. - No se realizan escaneos de Wi-Fi.
- Las sincronizaciones de
SyncAdapter
y los trabajosJobScheduler
hasta la próxima ventana de mantenimiento. - Las aplicaciones que reciben mensajes SMS y MMS se colocan en una lista blanca temporal para que puedan completar su procesamiento.
Salida
La plataforma sale del dispositivo de Doze cuando detecta:
- Interacción del usuario con el dispositivo
- movimiento del dispositivo
- La pantalla del dispositivo se enciende
- Alarma inminente AlarmClock
Las notificaciones no hacen que el dispositivo salga de Doze.
Android 7.0 y versiones posteriores amplían Doze al habilitar un modo de suspensión ligero con la pantalla apagada, antes de que el dispositivo esté inactivo.
Acción | Dormitar | Doze ligero |
---|---|---|
Generar | Pantalla apagada, con batería, fija | Pantalla apagada, con batería (desenchufada) |
Momento | Períodos sucesivamente crecientes con mantenimiento | Períodos repetidos de N minutos con ventanas de mantenimiento |
Restricciones | Sin acceso a la red, bloqueo de activación o exploración de GPS/Wi-Fi; alarmas y trabajos/sincronizaciones diferidas | Sin acceso a internet; trabajos/sincronizaciones diferidas excepto durante las ventanas de mantenimiento |
Comportamiento | Solo se recibieron mensajes de notificación push de alta prioridad | Todos los mensajes en tiempo real (mensajes instantáneos, llamadas, etc.) recibidos; el mensaje de notificación push de alta prioridad permite el acceso temporal a la red |
Salida | Alarma de movimiento, pantalla encendida o despertador | Pantalla en |
Interacción con la aplicación en espera
- El tiempo invertido en Doze no cuenta para App Standby.
- Mientras el dispositivo está en Doze, las aplicaciones inactivas pueden realizar operaciones normales al menos una vez al día.
Integrando Doze
Cuando Doze está habilitado, los dispositivos que admiten SENSOR_TYPE_SIGNIFICANT_MOTION
realizan optimizaciones completas de Doze (incluidas las optimizaciones ligeras); los dispositivos sin un SMD solo realizan optimizaciones ligeras de Doze. Android selecciona automáticamente las optimizaciones de Doze adecuadas y la configuración del proveedor no es necesaria.
Para habilitar Doze para un dispositivo:
- Confirme que el dispositivo tiene instalado un servicio de mensajería en la nube.
- En el archivo de configuración de superposición del dispositivo overlay
overlay/frameworks/base/core/res/res/values/config.xml
, configureconfig_enableAutoPowerModes
entrue
:<bool name="config_enableAutoPowerModes">true</bool>
En AOSP, este parámetro está configurado enfalse
(Doze deshabilitado) de manera predeterminada. - Confirme que las aplicaciones y los servicios precargados:
- Use las pautas de optimización de ahorro de energía . Para obtener más información, consulte Probar y optimizar aplicaciones .
O
- Están exentos de Doze y App Standby. Para obtener más información, consulte Aplicaciones exentas .
- Use las pautas de optimización de ahorro de energía . Para obtener más información, consulte Probar y optimizar aplicaciones .
- Confirme que los servicios necesarios están exentos de Doze.
Puntas
- Si es posible, use FCM para la mensajería descendente .
- Si sus usuarios deben ver una notificación de inmediato, use un mensaje de prioridad alta de FCM .
- Proporcione suficiente información dentro de la carga útil del mensaje inicial (para evitar el acceso a la red posterior innecesario).
- Configure alarmas críticas con
setAndAllowWhileIdle()
ysetExactAndAllowWhileIdle()
.
Probar y optimizar aplicaciones
Pruebe todas las aplicaciones (especialmente las aplicaciones precargadas) en modo Doze. Para obtener más información, consulte Pruebas con Doze y App Standby .