Para mejorar la duración de batería del dispositivo, Android puede afectar el estado del dispositivo supervisando el uso y el estado de activación. La plataforma puede entrar en un estado de suspensión para pausar las actividades que se ejecutan mientras el dispositivo no se usa.
Información acerca del modo Descanso
Doze extiende la duración de batería aplazando la actividad de CPU y de red en segundo plano de las apps cuando un dispositivo no se usa durante períodos prolongados.
Los dispositivos inactivos en Descanso entran periódicamente en un período de mantenimiento, durante el cual las apps pueden completar el trabajo pendiente (sincronizaciones, tareas, etcétera). Luego, el modo Descanso reanuda el modo de suspensión por un período más largo, seguido de otro período de mantenimiento. La plataforma continúa la secuencia de mantenimiento y suspensión de Doze, lo que aumenta la duración del tiempo inactivo cada vez, hasta alcanzar un máximo de unas horas de tiempo de suspensión. En todo momento, un dispositivo en Descanso sigue detectando el movimiento y sale de Descanso de inmediato si se detecta movimiento.
Android 7.0 y versiones posteriores extienden Descanso para activar un conjunto más ligero de optimizaciones cada vez que un usuario apaga la pantalla del dispositivo, incluso cuando el usuario sigue moviéndose, lo que permite una mayor duración de batería.
Por lo general, los fabricantes de dispositivos configuran los servicios del sistema críticos para que estén exentos de Doze. Los usuarios también pueden eximir apps específicas de Doze mediante el menú de configuración. Sin embargo, eximir apps puede agotar la batería del dispositivo. De forma predeterminada, Doze está inhabilitado en AOSP. Para obtener detalles sobre cómo habilitar Doze, consulta Cómo integrar Doze.
Requisitos de Doze
La compatibilidad con Doze requiere que el dispositivo tenga un servicio de mensajería en la nube, como Firebase Cloud Messaging (FCM). Los eventos de activadores externos, como los mensajes en la nube, pueden activar temporalmente las apps para que realicen tareas mientras el dispositivo permanece en el modo Descanso.
La compatibilidad total con Doze también requiere un detector de movimiento significativo (SMD) en el dispositivo. Sin embargo, el modo Doze ligero en Android 7.0 y versiones posteriores no requiere un SMD. Si el modo Descanso está habilitado en un dispositivo que cumple con las siguientes condiciones:
- Tiene un SMD, se realizan optimizaciones completas de Doze (incluye optimizaciones ligeras).
- No tiene un SMD, solo se realizan las optimizaciones de Doze ligeras.
Ciclo de vida de Doze
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.
La plataforma detecta que un dispositivo está inactivo en los siguientes casos:
- El dispositivo está estacionario (con SMD).
- La pantalla del dispositivo está apagada durante un tiempo.
El modo Descanso no se activa mientras un dispositivo con batería está conectado a un cargador.
Durante el modo Descanso
La plataforma intenta mantener el sistema en un estado de suspensión y, de forma periódica, reanuda las operaciones normales durante un período de mantenimiento y, luego, vuelve a poner el dispositivo en suspensión durante períodos más largos y repetidos. Durante el modo de suspensión, las siguientes restricciones están activas:
- Las apps no tienen permitido el acceso a la red.
- Se ignoran los bloqueos de activación de la app.
- Se aplazan las alarmas. No se incluyen las alarmas de reloj despertador ni las configuradas con
setAndAllowWhileIdle()
(limitadas a 1 por 15 minutos por app mientras se está en el modo Descanso). Esta exención está destinada a apps (como Calendario) que deben mostrar notificaciones de recordatorios de eventos. - No se realizan búsquedas de Wi-Fi.
- Las sincronizaciones de
SyncAdapter
y las tareas deJobScheduler
se difieren hasta la próxima ventana de mantenimiento. - Las apps que reciben mensajes SMS y MMS se colocan en una lista de entidades permitidas temporal para que puedan completar su procesamiento.
Salir
La plataforma sale del modo Descanso del dispositivo cuando detecta lo siguiente:
- Interacción del usuario con el dispositivo
- Movimiento del dispositivo
- La pantalla del dispositivo se enciende
- Alarma inminente de AlarmClock
Las notificaciones no hacen que el dispositivo salga del modo Descanso.
Android 7.0 y versiones posteriores extienden Doze habilitando un modo de suspensión ligero durante la pantalla apagada, antes de que el dispositivo esté inactivo.
Figura 1: Modos de Descanso para dispositivos estáticos y no estáticos
Acción | Descanso | Descanso ligero |
---|---|---|
Activador | Pantalla apagada, con batería, inmóvil | Pantalla apagada, con batería (desconectada) |
Tiempos | Períodos que aumentan de forma sucesiva con mantenimiento | Períodos repetidos de N minutos con períodos de mantenimiento |
Restricciones | Sin acceso a la red, bloqueo de activación ni escaneo de GPS o Wi-Fi; alarmas y tareas o sincronizaciones pospuestas | Sin acceso a la red; tareas o sincronizaciones diferidas, excepto durante los períodos de mantenimiento |
Comportamiento | Solo se reciben mensajes de notificaciones push de prioridad alta | Se recibieron todos los mensajes en tiempo real (mensajes instantáneos, llamadas, etcétera). El mensaje de notificación push de prioridad alta habilita el acceso a la red de forma temporal. |
Salir | Movimiento, pantalla encendida o alarma del reloj | Pantalla encendida |
Interacción con App Standby
- El tiempo que se pasa en el modo Descanso no se registra en App Standby.
- Mientras el dispositivo está en modo Descanso, las apps inactivas pueden realizar operaciones normales al menos una vez al día.
Cómo integrar Descanso
Cuando se habilita Doze, los dispositivos que admiten SENSOR_TYPE_SIGNIFICANT_MOTION
realizan optimizaciones completas de Doze (incluidas las optimizaciones livianas). Los dispositivos sin un SMD solo realizan optimizaciones livianas de Doze. Android selecciona automáticamente las optimizaciones de Doze adecuadas, y no es necesaria la configuración del proveedor.
Para habilitar Doze en un dispositivo, haz lo siguiente:
- Confirma que el dispositivo tenga instalado un servicio de mensajería en la nube.
- En el archivo de configuración de superposición del dispositivo
overlay/frameworks/base/core/res/res/values/config.xml
, establececonfig_enableAutoPowerModes
comotrue
: En AOSP, este parámetro se establece en<bool name="config_enableAutoPowerModes">true</bool>
false
(Doze inhabilitado) de forma predeterminada.
- Confirma que las apps y los servicios precargados cumplan con los siguientes requisitos:
- Usa los lineamientos de optimización para el ahorro de energía. Para obtener más información, consulta Cómo probar y optimizar apps.
OR
- Están exentos de Descanso y App Standby. Para obtener más información, consulta Cómo eximir apps.
- Usa los lineamientos de optimización para el ahorro de energía. Para obtener más información, consulta Cómo probar y optimizar apps.
- Confirma que los servicios necesarios estén exentos de Doze.
Sugerencias
- De ser posible, usa FCM para la mensajería descendente.
- Si los usuarios deben ver una notificación de inmediato, usa un mensaje de prioridad alta de FCM.
- Proporciona suficiente información dentro de la carga útil del mensaje inicial (para evitar el acceso innecesario a la red posteriormente).
- Establece alarmas críticas con
setAndAllowWhileIdle()
ysetExactAndAllowWhileIdle()
.
Prueba y optimiza apps
Prueba todas las apps (en especial, las precargadas) en el modo Descanso. Para obtener más información, consulta Cómo probar tu app con los modos Descanso y App Standby.