Cómo optimizar las caras de reloj

La cara de reloj de Wear OS funciona continuamente, por lo que debe usar la energía de manera eficiente.

Optimiza el rendimiento de la cara de reloj tanto como sea posible. En esta página, se describen las prácticas recomendadas para la optimización de las caras de reloj en general, así como las prácticas recomendadas para imágenes y animaciones.

Optimización básica

En esta sección, se incluyen las prácticas recomendadas para mejorar la eficiencia general de la cara de reloj.

Color y brillo de la cara de reloj

El uso de colores oscuros en la cara de reloj consume menos energía del reloj del usuario. Las siguientes son recomendaciones para establecer el fondo de la cara de reloj y, así, optimizar su uso de la batería:

  • Color: Siempre que sea posible, usa un fondo negro.
  • Brillo: Cuando no sea posible usar un fondo negro, mantén el brillo del color de fondo en 25% o menos en una escala de matiz, saturación, valor (HSV) o de matiz, saturación y brillo (HSB). Por ejemplo, si usas la clase Color para establecer un color de fondo definido con la escala HSV, usa una configuración de valor, que controla el brillo, de 25 o menos.

Usa capacidades dinámicas para interactuar con el teléfono

Cuando una cara de reloj requiere una operación para ejecutarse en el teléfono, ejecuta el código solo cuando la cara de reloj esté activa. El método recomendado para permitir que la app en el teléfono detecte que la cara de reloj correspondiente está activa es el uso de la API de CapabilityClient.

Supervisa el consumo de energía

La app complementaria de Wear OS permite a los desarrolladores y usuarios ver cuánta batería consumen los diferentes procesos en el dispositivo wearable. Para ello, ve a Configuración > Batería del reloj.

Registra caras de reloj con reconocimiento de encriptación

Android 7.0 y las versiones posteriores admiten encriptación basada en archivos y permiten que las aplicaciones con reconocimiento de encriptación se ejecuten antes de que el usuario proporcione la contraseña de desencriptación en el inicio. Esto puede reducir la duración de la transición de la animación de inicio a la cara de reloj hasta 30 segundos.

Para habilitar un inicio más rápido, agrega android:directBootAware="true" al manifiesto de la cara de reloj.

Nota: Usa esta función con caras de reloj que no usen almacenamiento encriptado con credenciales.

Prácticas recomendadas para animaciones

Las prácticas recomendadas de esta sección ayudan a reducir el consumo de energía asociado con las animaciones.

Reduce la velocidad de fotogramas de las animaciones

A menudo, el procesamiento de las animaciones es muy complejo y consume una cantidad considerable de energía. La mayoría de las animaciones tienen un aspecto fluido a 30 fotogramas por segundo; por ello, evita ejecutar tus animaciones a una velocidad de fotogramas más alta. En cambio, puedes usar velocidades de fotogramas dinámicas. Para obtener más información, consulta el ejemplo de lienzo de cara de reloj.

Deja que la CPU se suspenda entre animaciones

Para maximizar la duración de la batería, usa animaciones con moderación. Incluso los dos puntos intermitentes usan energía de la batería cada vez que parpadean.

Las animaciones y los cambios pequeños en el contenido de la cara de reloj activan la CPU. Permite que la CPU se suspenda entre animaciones. Por ejemplo, puedes usar ráfagas de animación cortas cada segundo en modo interactivo y, luego, dejar que se suspenda hasta el siguiente segundo. Dejar que la CPU se suspenda a menudo, aunque sea de manera breve, puede reducir considerablemente el consumo de energía.

Prácticas recomendadas para las imágenes

Las prácticas recomendadas en esta sección ayudan a reducir el consumo de energía asociado con las imágenes.

Reduce el tamaño de tus elementos de mapas de bits

Muchas caras de reloj constan de una imagen de fondo y otros recursos gráficos que se transforman y se superponen con ella, como las agujas del reloj y otros elementos que se mueven con el tiempo. Cuanto más grandes son estos recursos gráficos, más complejo es el procesamiento necesario para transformarlos. Por lo general, esos elementos gráficos se rotan y, a veces, se ajustan dentro del método Render.CanvasRenderer.render() cada vez que el sistema vuelve a dibujar la cara de reloj, como se describe en Cómo dibujar la cara de reloj.

Figura 1: Imagen de aguja de reloj recortada para quitar píxeles adicionales.

Reducir el tamaño de los elementos de mapa de bits mejora el rendimiento de las animaciones y ahorra energía. Sigue estas sugerencias para mejorar el rendimiento de la cara de reloj:

  • No uses elementos gráficos que sean más grandes de lo necesario.
  • Quita píxeles transparentes adicionales alrededor de los bordes.

Por ejemplo, el tamaño de la imagen de la aguja del reloj de la izquierda en la figura 1 se puede reducir en un 97% si se quitan los píxeles transparentes adicionales, como se muestra en la aguja de la derecha.

Combina elementos de mapas de bits

Si tienes mapas de bits que a menudo se dibujan juntos, considera combinarlos en un solo recurso gráfico. Por ejemplo, puedes combinar la imagen de fondo en modo interactivo con las marcas de verificación para evitar dibujar dos mapas de bits de pantalla completa cada vez que el sistema vuelve a dibujar la cara de reloj.

Inhabilita el suavizado de contorno en el dibujo de mapas de bits ajustado

Cuando dibujas un mapa de bits ajustado en el objeto Canvas utilizando el método Canvas.drawBitmap(), puedes proporcionar una instancia de Paint para configurar varias opciones. Para mejorar el rendimiento, inhabilita el suavizado de contorno mediante el método setAntiAlias(), ya que esta opción no tiene ningún efecto en los mapas de bits.

Figura 2: Ejemplo de filtro de mapa de bits inhabilitado (izquierda) y habilitado (derecha)

Usa el filtro de mapa de bits

Para los elementos de mapas de bits que dibujas sobre otros elementos, habilita el filtro de mapas de bits en la misma instancia de Paint utilizando el método setFilterBitmap(). En la Figura 2, se muestra una vista ampliada de una aguja de reloj con filtro de mapa de bits y sin él.

Nota: Cuando el modo ambiente está activo, inhabilita el filtro de mapa de bits. En el modo ambiente de pocos bits, el sistema no renderiza de manera confiable los colores de la imagen para que el filtro de mapas de bits lo procese correctamente.

Traslada las operaciones intensivas fuera del método de dibujo

El sistema llama al método Render.CanvasRenderer.render() cada vez que vuelve a dibujar tu cara de reloj. Para mejorar el rendimiento, incluye solo operaciones dentro de este método que sean estrictamente necesarias para actualizar la cara de reloj.

Cuando sea posible, evita realizar las siguientes operaciones dentro del método Render.CanvasRenderer.render():

  • Carga de imágenes y otros recursos
  • Cambio del tamaño de las imágenes
  • Asignación de objetos
  • Cálculos cuyos resultados no cambian entre marcos

Para analizar el rendimiento de la cara de reloj, usa el Generador de perfiles de CPU. En especial, asegúrate de que el tiempo de ejecución de la implementación de Render.CanvasRenderer.render() sea corto y coherente en todas las invocaciones. Para obtener más información, consulta Cómo inspeccionar la actividad de la CPU con el Generador de perfiles de CPU.

En la app de ejemplo de cara de reloj, se muestran las prácticas recomendadas para configurar una cara de reloj.