Cómo optimizar el uso de memoria para tu cara de reloj

Wear OS mejora la duración de batería haciendo un seguimiento del uso de la memoria. Las caras de reloj que usan el Formato de Caras de Relojes tienen límites de memoria, según los lineamientos de calidad de apps para Wear OS:

  • Modo ambiente: Uso máximo de memoria de 10 MB.
  • Modo interactivo: Uso máximo de memoria de 100 MB.

Cálculo del uso de memoria

Para calcular el uso de memoria de una imagen o una fuente de mapa de bits en una cara de reloj con el Formato de Caras de Relojes, el sistema hace lo siguiente:

  1. Descomprime la imagen o la fuente.
  2. Verifica si se aplican las siguientes optimizaciones:
    • Cambiar el tamaño para que se ajuste mejor a la pantalla
    • Recorte de píxeles transparentes
    • Downsampling to RGB565, without loss of fidelity

En función del cuadro delimitador resultante, el tamaño se calcula de la siguiente manera:

  • Para imágenes y fuentes que usan RGBA8888: 4 × ancho × alto
  • Para imágenes y fuentes que usan RGB565: 2 × ancho × altura
  • Para imágenes y fuentes que usan la configuración de mapa de bits ALPHA_8: ancho × alto

Modo interactivo

Para calcular el uso de memoria del modo interactivo, el sistema suma los siguientes valores:

  1. Es el tamaño sin procesar de cualquier fuente vectorial.
  2. El uso estimado de la fuente predeterminada del sistema
  3. Es el tamaño total de las imágenes y las fuentes de mapa de bits después de aplicar el recorte, el cambio de tamaño y el cambio de formato.

Configuraciones

En el caso de las caras de reloj con parámetros de configuración, el sistema intenta calcular el tamaño total de los recursos de la cara de reloj en diferentes configuraciones. Si la cantidad de combinaciones es muy grande, el sistema puede sobreestimar la cantidad de recursos que se usan de forma simultánea.

Modo ambiente y capas

El sistema supone que el modo ambiente usa hasta tres capas de pantalla completa, dos de las cuales son estáticas. Las capas incluyen lo siguiente:

  1. Es el fondo de la cara de reloj. El sistema lo trata como una sola imagen, independientemente de cuántas imágenes contenga el fondo.
  2. Piezas móviles, como manecillas, pantallas digitales o elementos dinámicos
  3. Son los elementos restantes del archivo en formato XML de origen.

Las fuentes de mapa de bits grandes suelen usar la mayor cantidad de memoria en el modo ambiente.

Métodos para reducir el uso de memoria

Usa las siguientes optimizaciones para reducir el uso de memoria.

Recorta y cambia el tamaño de las fuentes del mapa de bits

Recorta tus imágenes y objetos BitmapFont para que coincidan con el tamaño de la pantalla.

Wear OS dibuja caras de reloj con todas las imágenes descomprimidas. Una imagen de pantalla completa que está mayormente en blanco es posible que consuma 3 KB en disco, pero 750 KB o más en una pantalla de 450 x 450 píxeles.

Usa alturas de fuente de mapa de bits coherentes

Cuando uses una BitmapFont, asegúrate de que todas las imágenes de un carácter tengan la misma altura. Del mismo modo, asegúrate de que todas las imágenes de palabras tengan la misma altura.

Usa tamaños de fotogramas coherentes en las animaciones

En lugar de mover una imagen en una cara de reloj, actualiza los elementos de la imagen y mantén fija la posición del cuadro de límite. Por ejemplo, para animar un círculo en la cara de reloj, cambia su color en lugar de rotarlo.

Esta técnica reduce el tamaño del cuadro de límite calculado de la animación.

Anula el duplicado de imágenes

Para mostrar una imagen varias veces, incluye solo un recurso de imagen y haz referencia a él varias veces.

Muestra el progreso con objetos Arcs

Para simular una barra de progreso que finaliza después de 1 minuto o 1 hora, no uses 60 imágenes. Usa un objeto Arc con una expresión que controle su longitud, como se muestra a continuación:

<PartDraw angle="0" width="400" height="400" name="ProgressBar"
          pivotX="0.5" pivotY="0.5 x="40" y="40">
    <Arc centerX="200" centerY="200" width="400" height="400"
         startAngle="0" endAngle="360">
        <!-- Completes a "progress loop" every minute. -->
        <Transform target="endAngle"
                   value="0 + (clamp([SECOND], 0, 60) - 0) * 6" />
        <Stroke cap="ROUND" color="#123456" thickness="10" />
    </Arc>
</PartDraw>

Para mostrar una línea no continua, por ejemplo, para lograr un estilo de reloj digital retro, usa una propiedad de guion para un objeto Stroke o una máscara semitransparente que funcione como una superposición de imágenes.

Coloca las manecillas del reloj y las complicaciones al final del archivo fuente

Los nodos XML se dibujan en el orden que se indica en el archivo XML de origen. Si colocas las manecillas del reloj y las complicaciones al final, permites que el sistema elimine una capa completa del cálculo de memoria del modo ambiente.

Cómo evaluar el uso de memoria de tu cara de reloj

Para medir el uso de memoria de tu cara de reloj, usa la herramienta de evaluación de espacio en memoria, disponible en el repositorio watchface de GitHub.

  • Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
  • Arc
  • Line
  • Rectangle