Ahorra energía y batería

La eficiencia energética es especialmente 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 es un factor de forma pequeño, diseñado para interacciones cortas.

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 consumo de batería es más notorio. 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 del 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 tu app debería aprovechar el factor de forma de Wear OS. No debería copiar directamente tu app para dispositivos móviles.
  • Usa tu app para dispositivos móviles existente para obtener ayuda 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 el dispositivo Wear OS recibe cambios en los datos.
  • Diseña tus casos de uso para interacciones más cortas.
  • Ten en cuenta qué eventos de Wear OS usas y la frecuencia con la que ocurren.
  • Siempre que sea posible, aplaza el trabajo de la app hasta que el reloj se esté cargando. Esto se aplica especialmente a las tareas que consumen muchos datos, como la sincronización y la organización de bases de datos.

    Si el dispositivo se está cargando y tiene una conexión Wi-Fi, programa tareas para realizar una carga previa de datos, imágenes y actualizaciones que el usuario podría querer ver en tu app.

Esta guía de batería te ayuda a comprender cuándo y cómo ejecuta el sistema tu app, y cómo puedes limitar el tiempo de ejecución de tu app y el agotamiento de la batería. Para obtener más información sobre cómo se realizan acciones específicas, como cargar una app o desplazarte por una lista, consulta la guía relacionada con el rendimiento, como la Guía de rendimiento de 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 tu máquina de desarrollo:

adb shell dumpsys batterystats

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

Eventos que afectan la duración de batería

Antes de pensar en la 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 la batería en varios eventos comunes en las apps para Wear OS. El consumo exacto de energía puede variar según el dispositivo.

Evento Impacto en la duración de batería Cómo mitigar el problema
Acceder a la red, incluidas las redes LTE y Wi-Fi Muy alto Aplaza el acceso no esencial a la red hasta que el dispositivo se esté cargando.
Enciende la pantalla y comienza el modo interactivo Alto No animes al usuario a mantener 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 Medium Usa el tiempo de activación del procesador cuando recibas devoluciones de llamada de la API del sensor, como cuando se usen los Servicios de salud en Wear OS.
Cómo acceder a otro dispositivo mediante Bluetooth Medium Asegúrate de que las sesiones sean cortas.
Cómo mantener un bloqueo de activación Medium Reduce la creación manual de bloqueos de activación y usa WorkManager.

Minimizar el tiempo de uso

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

  • Bloqueos de pantalla: Se recomienda evitarlos siempre que sea posible. Para ello, desactiva la opción 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 enfócate en transiciones breves para obtener un aspecto más profesional. En particular, evita animaciones y bucles de larga duración. Si se requiere un bucle, agrega una pausa entre ellos que sea al menos tan larga como la animación en sí.
  • Tiempo despierto en modo ambiente: Se admite la función siempre activa si es necesario, por ejemplo, para casos de uso de actividad física. Si tu app requiere la función siempre encendida, verifica que haga lo siguiente cuando el dispositivo esté en el modo ambiente:

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

Minimiza el uso de CPU

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

  • El uso debe ser breve.
  • Agrupa las operaciones relacionadas para maximizar el tiempo de inactividad del proceso de tu app.

Minimizar los bloqueos de activación

En la mayoría de los casos, evita cualquier operación que impida que tu app se suspenda, como wakelocks. 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 se usan los Servicios de salud en Wear OS.

En algunos casos, es aceptable adquirir un bloqueo de activación, como cuando tu 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 en tu nombre cuando ejecuta el trabajo en segundo plano).

Con Battery Historian, puedes 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 tiene 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.

Cómo inspeccionar cómo se vuelve inactiva tu app

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

  • Se apaga la pantalla y el dispositivo entra en el modo ambiente.
  • La app se descartó por deslizamiento.

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

Generador de perfiles de energía

Puedes acceder al Generador de perfiles de energía desde 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 CPU del dispositivo.

Perfetto

Perfetto te permite capturar un registro y, luego, inspeccionar tu app para ver si hay subprocesos que estén realizando alguna tarea cuando se apaga la pantalla, el dispositivo ingresa al 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 playlists, 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 batería y CPU de tu app.

Analiza los trabajos programados de tu app

Los trabajos programados, que usan WorkManager, te permiten realizar trabajos en segundo plano en tu app. Si bien algunos trabajos en segundo plano deben ser periódicos, no ejecutes trabajos con demasiada frecuencia o 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.
  • Comprueba que el tiempo total de ejecución coincida con lo que esperas y que no sea mucho más extenso.

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 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 la app o si representan tareas periódicas 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 en 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, incluida la agrupación en lotes si está configurada.
  • Datos muestreados recientemente.

Prueba la anulación de registro de los sensores

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

  1. Desliza el dedo para descartar la app.
  2. Presiona la pantalla con la palma de la mano. Esto apagará la pantalla o la colocará 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 se utiliza la API de Data Layer, cada transmisión consume energía. En particular, si usas esta API para enviar datos, tu app se debe activar para recibir los datos. Por estos motivos, sé conservador con el uso de esta API.

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

  • Espera hasta que la 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 comenzó una sesión de entrenamiento.

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

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 se llaman mediante MessageClient.
  • DataService: Te permite ver la frecuencia con la que se configuran los elementos de datos mediante DataClient.

Apps de salud y fitness

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

  • En ExerciseClient, usa Battery Historian para verificar el comportamiento correcto en el modo ambiente. Comprueba que tu app no se active con más frecuencia que cada minuto o dos para recibir datos de ExerciseUpdate.
  • Para la supervisión de estado general que dura todo el día, usa el objeto PassiveMonitoringClient, según se describe en la guía sobre cómo supervisar los datos de salud y actividad física 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 trabajos correctamente programados 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 mayor que 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 interactúe con ella.
  • Usa enfoques que prioricen las operaciones sin conexión.
  • Comparte una única base de datos entre tu app principal, tarjetas y complicaciones. Esto también ayuda a mantener la coherencia de los datos en todas las plataformas de la IU.