Skip to content

Most visited

Recently visited

navigation

Cómo optimizar para Descanso y App Standby

A partir de Android 6.0 (nivel de API 23), Android presenta dos funciones de ahorro de energía que prolongan la vida de la batería administrando la forma en que las apps se comportan cuando un dispositivo no está conectado a una fuente de energía. Descanso reduce el consumo de batería aplazando la actividad de CPU y de red de las apps en segundo plano cuando el dispositivo no se usa durante períodos de tiempo prolongados. App Standby aplaza la actividad de red en segundo plano de las apps con las cuales el usuario no haya interactuado recientemente.

Descanso y App Standby manejan el comportamiento de todas las apps que funcionan con Android 6.0 o versiones posteriores, sin importar si se orientan específicamente al nivel de API 23. Para garantizar la mejor experiencia de usuario, prueba tu app en los modos Descanso y App Standby, y haz cualquier ajuste necesario en tu código. En las siguientes secciones se ofrece información detallada.

Información sobre el modo Descanso

Si un usuario deja un dispositivo desconectado, quieto y con la pantalla apagada durante un período de tiempo determinado, este entra en el modo Descanso. En el modo Descanso, el sistema intenta conservar la carga de la batería restringiendo el acceso por parte de las apps a servicios de uso intenso de red y CPU. También evita que las apps accedan a la red y aplaza sus tareas, sincronizaciones y alarmas estándares.

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

Figura 1: Descanso proporciona un período de mantenimiento recurrente para que las apps usen la red y controlen actividades pendientes.

Al finalizar cada período de mantenimiento, el sistema vuelve a activar el modo Descanso, suspender el acceso a la red y aplazar tareas, sincronizaciones y alarmas. Con el paso del tiempo, el sistema programa los períodos de mantenimiento cada vez con menos frecuencia, lo cual permite reducir el consumo de batería en casos de inactividad durante más tiempo cuando el dispositivo no está conectado a un cargador.

No bien el usuario activa el dispositivo moviéndolo, encendiendo la pantalla o conectándolo a un cargador, el sistema desactiva el modo Descanso y todas las apps vuelven a la actividad normal.

Restricciones del modo Descanso

Durante el modo Descanso, se aplican las siguientes restricciones a tus apps:

Lista de comprobación del modo Descanso

Adaptar tu app al modo Descanso

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

El modo Descanso es particularmente propenso a afectar actividades que controlan las alarmas y los temporizadores de AlarmManager, ya que las alarmas de Android 5.1 (nivel de API 22) o versiones anteriores no se activan cuando el sistema está en el modo Descanso.

Para ayudar en la programación de alarmas, Android 6.0 (nivel de API 23) presenta dos nuevos AlarmManager métodos: setAndAllowWhileIdle() y setExactAndAllowWhileIdle(). Con estos métodos, puedes establecer alarmas que se activen aun cuando esté en ejecución el modo Descanso del dispositivo.

Nota: Ni setAndAllowWhileIdle() ni setExactAndAllowWhileIdle() pueden activar alarmas más de una vez cada 9 minutos, por cada app.

La restricción de acceso a la red aplicada por el modo Descanso también puede afectar a tu app, en especial si la app depende de mensajes en tiempo real, como vibraciones o notificaciones. Si tu app requiere una conexión persistente a la red para recibir mensajes, debes usar Google Cloud Messaging (GCM) si es posible.

Para confirmar que tu app se comporte como esperas con el modo Descanso, puedes usar los comandos adb a fin de forzar el sistema para que active y desactive el modo Descanso y observar el comportamiento de tu app. Para obtener información detallada, consulta Pruebas con los modos Descanso y App Standby.

Información sobre App Standby

El modo App Standby permite que el sistema determine si una app se encuentra inactiva cuando el usuario no la usa activamente. El sistema hace esta determinación cuando el usuario no aplica toques en la app durante un período determinado y cuando no rige ninguna de las siguientes condiciones:

Cuando el usuario enchufa el dispositivo en una fuente de energía, el sistema libera las apps del estado de reposo, con lo cual les permite acceder libremente a la red y ejecutar cualquier tarea y sincronización pendientes. Si el dispositivo queda inactivo durante períodos prolongados, las apps inactivas pueden acceder a la red aproximadamente una vez al día.

Usar GCM para interactuar con tu app mientras el dispositivo está inactivo

Google Cloud Messaging (GCM) es un servicio de nube a dispositivo que te permite admitir mensajería descendente en tiempo real entre servicios de backend y apps de dispositivos Android. GCM brinda una conexión única y persistente a la nube. Todas las apps que necesiten mensajería en tiempo real pueden compartir esta conexión. Esta conexión compartida optimiza ampliamente el consumo de batería al eliminar la necesidad de que varias apps mantengan su propia conexión separada persistente, lo cual puede agotar la batería rápidamente. Por este motivo, si tu app requiere integración de mensajería con un servicio de backend, te recomendamos que uses GCM si es posible, en lugar de mantener tu propia conexión de red persistente.

GCM está optimizado para funcionar con los modos inactivos Descanso y App Standby a través de mensajes GCM de prioridad. Los mensajes de prioridad de GCM te permiten habilitar tu app para acceder a la red, incluso cuando se encuentran activos el modo Descanso del dispositivo del usuario o el modo App Standby de la app. En el modo Descanso o App Standby, el sistema entrega el mensaje, otorga a la app acceso temporario a servicios de red y wakelocks parciales, y luego restablece el estado inactivo del dispositivo o de la app.

Los mensajes de prioridad de GCM no afectan de ninguna manera el modo Descanso ni el estado de ninguna otra app. Esto significa que tu app puede usarlos para comunicarse de manera eficiente mientras y, al mismo tiempo, minimizar el impacto sobre la batería en el sistema y el dispositivo.

Como práctica recomendada general, si tu app requiere mensajería descendente, debe usar GCM. Si tu servidor y cliente ya usan GCM, asegúrate de que en tu servicio se usen mensajes de prioridad para mensajes críticos, ya que esto habilitará las apps incluso cuando esté activo el modo Descanso del dispositivo.

Compatibilidad con otros casos de uso

Casi todas las apps deben ser compatibles con el modo Descanso a través de la administración de la conectividad de red, las alarmas, las tareas y las sincronizaciones correctamente, y usando mensajes de alta prioridad de GCM. Para un pequeño grupo de casos de uso, es posible que esto no sea suficiente. Para tales casos, el sistema brinda una lista blanca configurable de apps que están parcialmente exentas de optimizaciones de Descanso y App Standby.

Una app que está en la lista blanca puede usar la red y conservar wake locks parciales durante los modos Descanso y App Standby. Sin embargo, se aplican otras restricciones a la app de la lista blanca, como a otras apps. Por ejemplo, las tareas y sincronizaciones de las apps de la lista blanca se aplazan (en el nivel de API 23 y en niveles inferiores) y sus alarmas AlarmManager normales no se activan. Una app puede comprobar si se encuentra en la lista blanca de exención llamando a isIgnoringBatteryOptimizations().

Los usuarios pueden configurar de manera manual la lista blanca en Settings > Battery > Battery Optimization. De manera alternativa, el sistema ofrece métodos para que las apps soliciten a los usuarios que las agreguen a la lista blanca.

Antes de solicitar al usuario que agregue tu app a la lista blanca, asegúrate de que la app coincida con los casos de uso aceptables para la disposición en la lista blanca.

Nota: Las políticas de Google Play prohíben que las apps soliciten exención directa de las funciones de administración de energía en Android 6.0 y versiones posteriores (Descanso y App Standby), a menos que la función central de la app se vea afectada de manera adversa.

Pruebas con los modos Descanso y App Standby

Para garantizar una excelente experiencia de usuario, debes probar tu app por completo en los modos Descanso y App Standby.

Cómo probar tu app con el modo Descanso

Puedes probar el modo Descanso siguiendo estos pasos:

  1. Configura un dispositivo de hardware o virtual con una imagen de sistema de Android 6.0 (nivel de API 23) o versiones posteriores.
  2. Conecta el dispositivo a tu equipo de desarrollo e instala tu app.
  3. Ejecuta tu app y déjala activa.
  4. Apaga la pantalla del dispositivo. (La app permanece activa).
  5. Haz que el sistema complete por la fuerza un ciclo del modo Descanso ejecutando los siguientes comandos:
    $ adb shell dumpsys battery unplug
    $ adb shell dumpsys deviceidle step

    Tal vez necesites ejecutar el segundo comando más de una vez. Repite la operación hasta que cambie el dispositivo pase al estado de inactividad.

  6. Observa el comportamiento de tu app después de reactivar el dispositivo. Asegúrate de que la app se recupere correctamente cuando el dispositivo salga del modo Descanso.

Probar tu app con App Standby

Para probar el modo App Standby con tu aplicación, realiza lo siguiente:

  1. Configura un dispositivo de hardware o virtual con una imagen de sistema de Android 6.0 (nivel de API 23) o versiones posteriores.
  2. Conecta el dispositivo a tu equipo de desarrollo e instala tu app.
  3. Ejecuta tu app y déjala activa.
  4. Haz que la app pase por la fuerza al modo App Standby ejecutando los siguientes comandos:
    $ 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 se reactive correctamente después del modo App Standby. En particular, debes comprobar si los trabajos en segundo plano y las notificaciones de tu app continúan funcionando de la manera esperada.

Casos de uso aceptables para listas blancas

En la siguiente tabla se destacan los casos de uso aceptables para solicitar la lista blanca de excepciones de Optimizaciones de batería o aparecer en ella. En general, tu app no debe estar en la lista blanca, a menos que el Descanso o App Standby dañen la función central de la app o haya un motivo técnico por el cual tu app no pueda usar mensajes de prioridad de GCM.

Para obtener más información, consulta Compatibilidad con otros casos de uso .

Tipo Caso de uso ¿Puede usar GCM? ¿Puede aceptarse en la lista blanca? Notas
App de mensajería instantánea, chat o llamadas. Requiere envío de mensajes en tiempo real para los usuarios mientras se encuentran activos el modo Descanso del dispositivo o el modo App Standby de la app. Sí, usando GCM. No se acepta. Debe usar mensajes de prioridad de GCM para activar la app y acceder a la red.
Sí, pero no usa mensajes de prioridad de GCM.
App de mensajería instantánea, chat o llamadas; apps de VOIP empresariales. No, no puede usar GCM debido a una dependencia técnica de otro servicio de mensajería, o Descanso y App Standby dañan la función central de la app. Se acepta.
App de automatización de tarea. La función central de la app es la programación de acciones automáticas, como para mensajería instantánea, llamadas de voz, nueva gestión de fotos o acciones de ubicaciones. Si corresponde. Se acepta.
App complementaria para dispositivo periféricos. La función central de la app es mantener una conexión persistente con el dispositivo periférico para brindar acceso a Internet al dispositivo periférico. Si corresponde. Se acepta.
La app solo debe conectarse a un dispositivo periférico de manera periódica para la sincronización o solo debe conectarse a dispositivos, como auriculares inalámbricos, conectados a través de perfiles Bluetooth estándares. Si corresponde. No se acepta.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)