Ahorra energía y batería

La eficiencia energética es particularmente importante en Wear OS. Los principios de diseño de Wear OS se centran significativamente en el consumo de energía del dispositivo, ya que 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 el agotamiento de la batería es más evidente. Además, el usuario necesita más esfuerzo para cargar un dispositivo Wear OS que un dispositivo móvil. Si bien los usuarios pueden cargar sus dispositivos móviles en varios intervalos durante el día, deben desconectar un dispositivo Wear OS del 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 la app debe aprovechar bien 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 como ayuda para determinados casos de uso. Por ejemplo, la sincronización y la conexión a Internet en el reloj son costosas. Considera si el dispositivo móvil podría hacer el trabajo pesado y el dispositivo Wear OS recibe cambios en los datos.
  • Diseña tus casos de uso para interacciones más cortas.
  • Piensa 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 se esté cargando. Esto se aplica, en particular, a las tareas que consumen muchos datos, como la sincronización de datos y la organización de bases de datos.

    Si el dispositivo se está cargando y tiene una conexión Wi-Fi, programa trabajos para precargar datos, imágenes y actualizaciones que el usuario probablemente quiera ver en tu app.

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

Cómo supervisar el uso de la batería a lo largo del tiempo

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

adb shell dumpsys batterystats

Una biblioteca en GitHub cuenta con un analizador de estadísticas de 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 consume energía en un dispositivo Wear OS.

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

Evento Impacto en la duración de la batería Cómo mitigar
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.
Enciende la pantalla y, luego, inicia el modo interactivo Alto No animes al usuario a mantener la pantalla encendida más de lo necesario. Proporciona una experiencia que use el modo siempre encendido, también conocido como modo ambiente.
Cómo acceder al sensor de GPS Alto Si es posible, espera hasta que el usuario solicite acceso al GPS.
Mantén alto el uso de la CPU Alto Consumir flujos con Jetpack Compose
Cómo acceder al sensor de frecuencia cardíaca Medium Usa el tiempo de actividad del procesador cuando recibas devoluciones de llamada de la API del sensor, como cuando usas los Servicios de salud en Wear OS.
Acceder a otro dispositivo por Bluetooth Medium Las sesiones deben ser breves.
Cómo mantener un bloqueo de activación Medium Reduce la creación manual de bloqueos de activación y usa WorkManager.

Minimiza el tiempo de encendido de la pantalla

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

  • Bloqueos de pantalla: Evita el uso siempre que sea posible. Para realizar la prueba, desactiva la Pantalla siempre activa en la configuración del sistema y observa si la pantalla se apaga dentro del tiempo de espera.
  • Animaciones: Minimiza las animaciones elaboradas y, en su lugar, enfócate en transiciones breves para obtener un aspecto más profesional. En particular, evita las animaciones y bucles de larga duración. Si se requiere un bucle, agrega una pausa entre los bucles que sea, al menos, la misma que la animación.
  • Tiempo despierto en modo ambiente: Admite la función siempre activa si es necesario, por ejemplo, en casos de uso de actividad física. Si tu app requiere la función siempre activa, 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 onAmbientUpdate().

Minimiza el uso de CPU

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

  • Haz que el uso sea breve.
  • Agrupa las operaciones relacionadas para maximizar el tiempo que el proceso de la app estará inactivo.

Minimiza los bloqueos de activación

En la mayoría de los casos, evita cualquier operación que impida que la app se suspenda, 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 actividad del procesador cuando recibas devoluciones de llamada de la API del sensor, como cuando usas los Servicios de salud en Wear OS.

En algunos casos, es correcto adquirir un bloqueo de activación, como cuando la app realiza una de las siguientes acciones:

  • Reproduce contenido multimedia en segundo plano.
  • Usa WorkManager o JobScheduler. (El sistema mantiene un bloqueo de activación por ti cuando ejecuta el trabajo en segundo plano).

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

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

Inspecciona cómo se desactiva tu app

Ten en cuenta lo que hace la app activa cuando se producen eventos clave en el dispositivo, como los siguientes:

  • Se apaga la pantalla y el dispositivo entra en el modo ambiente.
  • La app se descarta con el deslizamiento.

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

Generador de perfiles de energía

Se puede acceder al Generador de perfiles de energía en el menú de Android Studio seleccionando View > Tool Windows > Profiler:

  1. Inspecciona el registro del sistema a medida que 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 registro y, luego, inspeccionar tu app para ver si hay subprocesos que estén realizando tareas cuando se apaga la pantalla, el dispositivo entra en el modo ambiente o el usuario descarta la actividad de tu app.

Define eventos personalizados para marcar los eventos importantes 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 listas de reproducción, descargar un elemento multimedia específico, iniciar y detener la reproducción. Si defines estos eventos, puedes verlos en Perfetto y comparar sus tiempos con el uso de CPU y energía de tu app.

Analiza los trabajos programados de tu app

Las tareas programadas, con WorkManager, te permiten realizar tareas en segundo plano en tu app. Aunque algunos trabajos en segundo plano deben ser periódicos, no los ejecutes con demasiada frecuencia ni durante mucho tiempo, ya que esto puede agotar la batería del dispositivo.

Usa Battery Historian para inspeccionar la ejecución de los trabajos programados, tanto en general (Estadísticas del sistema > Estadísticas de Jobscheduler) como por app (Estadísticas de la app > Trabajo programado). Verifica la cantidad total y la duración total:

  • Si un trabajo se ejecuta con mucha frecuencia, considera reducir esta frecuencia.
  • Verifica que el tiempo total de ejecución coincida con lo que esperabas y que no sea mucho mayor.

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 le muestra al propietario de la tarea en ejecución. Ten en cuenta lo siguiente:

  • Para tu app, la duración de la ejecución debería tener sentido.
  • Considera si los trabajos se realizan mientras se ejecuta tu app o si representan trabajos periódicos en segundo plano.

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 los datos de forma inteligente para mejorar el rendimiento de la batería.

Para analizar el uso del sensor 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 se estableció.
  • Datos muestreados recientemente.

Prueba la cancelación del registro de los sensores

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

  1. Desliza para descartar la app.
  2. Presiona la pantalla con la palma. Esto apaga la pantalla o la coloca en el modo ambiente.

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

Capa de datos

Cuando usas la API de Data Layer, cada transmisión usa potencia. En particular, si usas esta API para enviar datos, tu app debe activarse para recibirlos. Por estos motivos, sé conservador con el uso de esta API.

Algunas prácticas recomendadas adicionales para usar la API de Data Layer son las siguientes:

  • Espera hasta 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 cuándo comenzó una sesión de entrenamiento.

    Transmite solo los cambios de estado que actualicen tu IU. Por ejemplo, si la pantalla de actividad solo muestra "kilómetros corridos" en un decimal, no envíes un cambio de estado a Wear OS cada vez que el usuario avance otro metro.

Para analizar el uso de la API de Data Layer en tu app, ejecuta el siguiente comando en una ventana de terminal de tu 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 qué rutas de acceso se llaman mediante MessageClient.
  • DataService: Te permite ver la frecuencia con la que 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.

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 los trabajos programados de manera adecuada para enviar actualizaciones de datos. Asegúrate de evitar una frecuencia rápida de actualizaciones, lo que puede provocar que el sistema programe trabajos repetidos a una velocidad menor a la que el usuario o la plataforma pueden acceder a los datos necesarios para realizar ese trabajo.
  • No programes trabajos para tu tarjeta o complicación cuando el usuario no esté interactuando con ella.
  • Usa enfoques que prioricen el uso sin conexión.
  • Comparte una sola base de datos en la app principal, las tarjetas y las complicaciones. Esto también ayuda a que los datos se mantengan coherentes en todas las plataformas de la IU.