Ahorra energía y batería

Palabras clave: wearos, energía, batería, rendimiento

La eficiencia energética es especialmente importante en Wear OS. Los principios de diseño de Wear OS se enfocan de manera significativa en el uso de energía del dispositivo porque el reloj tiene un factor de forma pequeño, diseñado para interacciones breves.

En comparación con los dispositivos móviles más grandes, los dispositivos Wear OS tienen baterías más pequeñas, por lo que cualquier consumo de batería es más notorio. Además, al usuario le cuesta más cargar un dispositivo Wear OS en comparación con un dispositivo móvil. Si bien los usuarios pueden cargar sus dispositivos móviles en varios intervalos a lo largo del día, deben quitar un dispositivo Wear OS de su cuerpo antes de cargarlo.

Para mejorar la eficiencia energética de tu app, sigue estas prácticas recomendadas de diseño:

  • El diseño de tu app debe aprovechar el factor de forma de Wear OS. No debe copiar directamente tu app para dispositivos móviles.
  • Usa tu app para dispositivos móviles existente para ayudar con ciertos casos de uso. Por ejemplo, Internet y la sincronización en el reloj son costosos. Considera si el dispositivo móvil podría hacer el trabajo pesado y que el dispositivo Wear OS reciba cambios en los datos.
  • Diseña tus casos de uso para interacciones más cortas.
  • Considera qué eventos de Wear OS usas y con qué frecuencia ocurren.
  • Siempre que sea posible, aplaza el trabajo de tu app hasta que el reloj esté cargando. Esto se aplica especialmente a las tareas que requieren muchos datos, como sincronizar datos y organizar bases de datos.

    Si el dispositivo se está cargando y tiene una conexión Wi-Fi, programa tareas para recuperar previamente los datos, las imágenes y las actualizaciones que es probable que el usuario quiera ver en tu app.

Esta guía de energía te ayuda a comprender cuándo y cómo el sistema ejecuta tu app, y cómo puedes limitar el tiempo de ejecución y el consumo de batería de tu app. Para obtener más información sobre cómo se logran acciones específicas, como cargar una app o desplazarse por una lista, consulta la guía relacionada con el rendimiento, como la guía de rendimiento de Compose en Wear OS.

Supervisa el uso de batería a lo largo del tiempo

Para analizar las estadísticas de batería de un dispositivo Wear OS que ejecuta tu app, ingresa el siguiente comando en una ventana de terminal de tu máquina de desarrollo:

adb shell dumpsys batterystats

Una biblioteca en GitHub incluye un analizador de estadísticas de la batería, que podría ser útil para ejecutar junto con este comando.

Eventos que afectan la duración de la batería

Antes de pensar en tu app específicamente, vale la pena pensar de manera más general en los eventos que consumen energía en un dispositivo Wear OS.

En la siguiente tabla, se muestra el efecto relativo en la duración de batería en varios eventos comunes en las apps para Wear OS. El consumo de energía exacto varía según el dispositivo.

Evento Impacto en la duración de batería Cómo mitigar el problema
Acceder a la red, incluidos LTE y Wi-Fi Muy alto Aplaza el acceso a la red no esencial hasta que el dispositivo se esté cargando.
Cómo encender la pantalla y comenzar el modo interactivo Alto No sugieras al usuario que mantenga la pantalla encendida más tiempo del necesario. Proporciona una experiencia que use el modo siempre activo, también conocido como modo ambiente.
Cómo acceder al sensor GPS Alto Si es posible, espera hasta que el usuario solicite acceso al GPS.
Mantén alto el uso de la CPU Alto Consume flujos con Jetpack Compose.
Cómo acceder al sensor de frecuencia cardíaca Medio Usa el tiempo de activación del procesador cuando recibas devoluciones de llamada de la API del sensor, como cuando uses Health Services en Wear OS.
Cómo acceder a otro dispositivo a través de Bluetooth Medio Mantén las sesiones breves.
Cómo mantener un bloqueo de activación Medio Reduce la creación manual de bloqueos de activación y usa WorkManager.

Minimiza el tiempo de pantalla activa

En tu app para Wear OS, sigue estos principios de uso de la pantalla:

  • Bloqueos con la pantalla encendida: Evita esta opción siempre que sea posible. Para probarlo, desactiva la Pantalla siempre activa en la configuración del sistema y observa si la pantalla se apaga durante el período de tiempo de espera.
  • Animaciones: Minimiza las animaciones elaboradas y, en su lugar, enfócate en transiciones breves para lograr un aspecto más profesional. En particular, evita las animaciones y los bucles de larga duración. Si se requiere un bucle, agrega una pausa entre los bucles que sea, al menos, tan larga como la animación.
  • Tiempo de activación en el modo ambiente: Admite el modo siempre activo si es necesario, como en los casos de uso de fitness. Si tu app requiere el modo siempre activo, verifica que haga lo siguiente cuando el dispositivo esté en el modo ambiente:

    • Reduce el porcentaje de la pantalla del dispositivo que está iluminada.
    • No muestra animaciones.
    • No actualiza el contenido de la pantalla, excepto durante una devolución de llamada de onAmbientUpdate().

Minimiza el uso de la CPU

En tu app para Wear OS, sigue estos principios de uso de la CPU:

  • Mantén el uso breve.
  • Agrupa las operaciones relacionadas para maximizar el tiempo que el proceso de tu app está inactivo.

Minimiza los bloqueos de activación

En la mayoría de los casos, evita las operaciones que impidan que la app entre en modo de suspensión, como los bloqueos de activación. Por ejemplo, en las apps de salud y fitness, los entrenamientos de larga duración no necesitan un bloqueo de activación. Usa el tiempo de activación del procesador cuando recibas devoluciones de llamada de la API del sensor, como cuando usas Health Services en Wear OS.

Hay algunos casos en los que está bien adquirir un bloqueo de activación, como cuando tu app hace una de las siguientes acciones:

  • Reproduce contenido multimedia en segundo plano.
  • Usa WorkManager o JobScheduler. (El sistema mantiene un bloqueo de activación en tu nombre cuando ejecuta la tarea en segundo plano).

Battery Historian te permite ver instancias individuales de bloqueos de activación prolongados, así como resúmenes de la cantidad total y la duración de los bloqueos de activación que se mantienen. Inspecciona la cantidad y la duración de los bloqueos de activación que mantiene tu app, y compara esta información con los patrones de uso interactivos de tu app:

  • Verifica si hay bloqueos de activación inesperados.
  • Si la duración es mayor de lo esperado, considera si el trabajo está bloqueado en alguna dependencia, como la disponibilidad de la red.

Inspecciona cómo se vuelve inactiva tu app

Considera lo que hace la app activa cuando ocurren eventos clave del dispositivo, como los siguientes:

  • La pantalla se apaga y el dispositivo entra en el modo ambiente.
  • La app se deshace con un deslizamiento.

Para analizar la actividad de la app, usa las herramientas que se muestran en las siguientes secciones.

Generador de perfiles de energía

Para acceder al generador de perfiles de energía, selecciona View > Tool Windows > Profiler en el menú de Android Studio:

  1. Inspecciona el registro del sistema cuando se apaga la pantalla y el dispositivo entra en el modo ambiente.
  2. Busca cualquier trabajo que continúe y el nivel de uso de la CPU del dispositivo.

Perfetto

Perfetto te permite registrar un seguimiento y, luego, inspeccionar tu app para ver si hay subprocesos que realizan algún trabajo cuando se apaga la pantalla, el dispositivo entra en modo ambiente o el usuario descarta la actividad de tu app.

Define eventos personalizados para marcar los eventos significativos de tu app, incluidos los eventos específicos del dominio. En el caso de una app de música, esto incluiría tareas como recuperar playlists, descargar un elemento multimedia específico, iniciar la reproducción y detenerla. Si defines estos eventos, podrás verlos en Perfetto y comparar su tiempo con el uso de CPU y energía de tu app.

Cómo analizar los trabajos programados de tu app

Las tareas programadas, con WorkManager, te permiten realizar tareas en segundo plano en tu app. Si bien algunos trabajos en segundo plano deben ser periódicos, no ejecutes tareas con demasiada frecuencia o por un período prolongado, ya que esto puede agotar la batería del dispositivo.

Usa Battery Historian para inspeccionar la ejecución de tareas programadas, tanto en general (System stats > Jobscheduler stats) como por app (App stats > Scheduled job). Verifica el recuento total y la duración total:

  • Si una tarea se ejecuta con mucha frecuencia, considera reducir esta frecuencia.
  • Verifica que el tiempo de ejecución total coincida con lo que esperas y no sea mucho más largo.

Además, inspecciona el gráfico de Battery Historian y observa cada entrada de JobScheduler. Cuando mantienes el puntero sobre una entrada en particular, Battery Historian muestra el propietario de la tarea en ejecución. Ten en cuenta lo siguiente:

  • En el caso de tu app, la duración de la ejecución debe tener sentido.
  • Considera si las tareas se realizan mientras tu app se ejecuta o si representan un trabajo en segundo plano periódico.

Sensores

Los dispositivos Wear OS tienen muchos sensores diferentes, como el GPS. En la mayoría de los casos, usa los Servicios de salud en Wear OS en lugar de interactuar directamente con SensorManager. En muchos casos, los Servicios de salud agrupan datos de forma inteligente para mejorar el rendimiento de la batería.

Para analizar el uso de los sensores en tu app, ejecuta el siguiente comando en una ventana de terminal de tu máquina de desarrollo:

adb shell dumpsys sensorservice

Los resultados de este comando muestran lo siguiente:

  • Registros de sensores actuales y anteriores
  • Configuración del sensor, incluido el procesamiento por lotes si está configurado
  • Datos de muestra recientes

Prueba la cancelación del registro desde los sensores

Para verificar si tu app deja de recuperar datos del sensor como se espera, prueba las siguientes situaciones:

  1. Desliza el dedo hacia la izquierda para descartar la app.
  2. Presiona la pantalla con la palma de la mano. Esto apagará la pantalla o la pondrá en modo ambiente.

Usa el comando ADB de la sección anterior para verificar si el sensor se muestra correctamente como no registrado.

Capa de datos

Cuando se usa la API de Data Layer, cada transmisión consume energía. En particular, si usas esta API para enviar datos, tu app debe activarse para recibirlos. Por estos motivos, usa esta API con moderación.

Estas son algunas prácticas recomendadas adicionales para usar la API de Data Layer:

  • Espera a que tu app esté activa antes de configurar un objeto de escucha con WearableListenerService.
  • Transmite cambios de estado en lugar de configurar actualizaciones rápidas. Estos cambios de estado permiten que el dispositivo Wear OS realice cálculos de datos locales, como cuando se inicia una sesión de entrenamiento.

    Solo transmite los cambios de estado que actualizan tu IU. Por ejemplo, si la pantalla de actividad solo muestra "kilómetros recorridos" con un decimal, no envíes un cambio de estado a Wear OS cada vez que el usuario avance un metro.

Para analizar el uso de la API de Data Layer en tu app, ejecuta el siguiente comando en una ventana de terminal de la máquina de desarrollo:

adb shell dumpsys activity service WearableService

Los resultados de este comando incluyen lo siguiente:

  • RpcService: Te permite ver con qué frecuencia y a qué rutas se llama con MessageClient.
  • DataService: Te permite ver con qué frecuencia se configuran los elementos de datos con DataClient.

Apps de salud y fitness

Si administras una app de salud y fitness, usa los Servicios de salud para optimizar el uso de los sensores de tu app.

  • Para ExerciseClient, usa Battery Historian para verificar el comportamiento correcto en el modo ambiente. Verifica que tu app no se active con mayor frecuencia que cada uno o dos minutos para recibir datos de ExerciseUpdate.
  • Para la supervisión general del estado durante todo el día, usa PassiveMonitoringClient, como se describe en la guía para supervisar los datos de salud y fitness en segundo plano.

Mosaicos y complicaciones

Si tu app admite una tarjeta o una complicación, sigue estas prácticas recomendadas:

  • Inhabilita la actualización automática o aumenta la frecuencia de actualización a 2 horas o más.
  • Usa Firebase Cloud Messaging (FCM) o tareas programadas de forma adecuada para enviar actualizaciones de datos. Ten cuidado de evitar una tasa de actualizaciones rápida, que puede hacer que el sistema programe trabajo repetido a una velocidad más rápida que la que el usuario o la plataforma pueden acceder a los datos necesarios para realizar ese trabajo.
  • No programes trabajo para tu tarjeta o complicación cuando el usuario no esté interactuando con ella.
  • Usa enfoques que priorizan la conexión sin conexión.
  • Comparte una sola base de datos en tu app principal, tarjetas y complicaciones. Esto también ayuda a que los datos se mantengan coherentes en todas las plataformas de la IU.