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

Para brindar la mejor duración de batería en los dispositivos Wear OS, el sistema realiza un cálculo del uso de memoria. Como parte del programa de calidad de apps para Wear OS , las caras de reloj que usan el Formato de Caras de Relojes tienen límites cantidad de memoria que pueden consumir, según el estado actual del reloj:

  • En el modo ambiente, la cara de reloj no puede consumir más de 10 MB de memoria.
  • En el modo interactivo, la cara de reloj no puede consumir más de 100 MB de memoria.

El sistema calcula el uso de memoria de una cara de reloj

Para calcular el tamaño que ocupa una imagen o una fuente de mapa de bits en una cara de reloj que usa el Formato de Caras de Relojes, el sistema completa los siguientes pasos:

  1. Descomprime la fuente de la imagen o del mapa de bits.
  2. Examina la fuente de la imagen o del mapa de bits para ver si se puede optimizar en uno de de la siguiente manera:
    • Se cambió el tamaño para que coincida mejor con el de visualización.
    • Se recortó para quitar píxeles completamente transparentes.
    • Se redujo el muestreo a RGB565, en caso de que se pueda hacer sin hacerlo. pérdida de fidelidad.

Según el cuadro de límite resultante, el sistema calcula el tamaño de la imagen. o fuente de mapa de bits, en bytes, como una de las siguientes opciones:

  • Para imágenes y fuentes que usan RGBA8888: \( 4 \times width \times height \)
  • Para imágenes y fuentes que usan RGB565: \( 2 \times width \times height \)
  • Para imágenes y fuentes que usan la configuración de mapa de bits ALPHA_8: \( width \times height \)

Modo interactivo

Al calcular el uso de memoria para el modo interactivo, el sistema calcula la de los siguientes elementos:

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

Configuraciones

Para las caras de reloj que contienen configuraciones, el sistema intenta calcular el tamaño total de los recursos usados en las diferentes configuraciones. A veces, cuando hay una gran cantidad de combinaciones, el sistema sobreestima ligeramente cuántos recursos se usan simultáneamente en todo el diferentes parámetros de configuración.

Capas y modo ambiente

Para el modo ambiente, el sistema supone que el reloj se renderiza usando hasta tres capas de pantalla completa, dos de las cuales son completamente estáticas:

  1. Todo debajo de los elementos del reloj. La mayor parte del "cuerpo" de la cara de reloj es compuestos en esta capa. No importa cuántas imágenes se usen para dibujar esta capa; el sistema la cuenta como una imagen en pantalla completa.
  2. Cualquier manecilla de reloj, pantalla digital o complicación con vinculaciones de plataforma que se renderizan de forma dinámica.
  3. Todos los elementos que se enumeran después de las manecillas del reloj y las complicaciones en la archivo XML de origen.

Por lo general, la mayor parte del uso de memoria en el modo ambiente proviene de fuentes de mapas de bits, en especial de los grandes.

Métodos para reducir el uso de memoria

Si sigues las sugerencias de esta sección, es más probable que crees un cara de reloj cuyo consumo de memoria se mantenga dentro de estos límites.

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

Recorta tus imágenes y objetos BitmapFont, y cambia su tamaño para que coincidan con el tamaño de visualización.

Cuando Wear OS dibuja una cara de reloj, todas las imágenes se descomprimen. Una imagen de pantalla completa que está mayormente en blanco es posible que consuma 3 KB en disco, pero si se muestra en una pantalla de 450 x 450 píxeles, el sistema descomprime la imagen y aumenta su tamaño en la memoria a 750 KB o más.

Usa alturas de fuente de mapa de bits coherentes

Cuando se usa una BitmapFont, todas las imágenes de un carácter deben tener la misma altura. Del mismo modo, todas las imágenes de palabras deben tener la misma altura.

Usa tamaños de fotogramas coherentes en las animaciones

En lugar de mover una imagen por una cara de reloj, actualiza los elementos y mantiene su cuadro delimitador en la misma ubicación que la cara de reloj. Por ejemplo, si quieres animar un círculo en la cara de reloj, considera cambiar el color de un círculo en lugar de girarlo por el reloj cara.

Esta técnica reduce el tamaño del cuadro delimitador que calcula el sistema para la animación.

Anula el duplicado de imágenes

Si la cara de reloj muestra varias copias de la misma imagen, incluye solo una. copia de esa imagen en el directorio de recursos y hacer referencia a ella varias veces.

Muestra el progreso con objetos Arcs

Para emular una barra de progreso que se completa después de 1 minuto o después de 1 hora, no uses 60 imágenes distintas. En su lugar, crea un objeto Arc que contenga una expresión que controle su longitud, como se muestra en el siguiente fragmento de código:

<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>

Si quieres mostrar una línea no continua, por ejemplo, para lograr un estilo de reloj digital retro, usa una propiedad de guión 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 en que se enumeran en el archivo XML de origen. De colocar las manecillas del reloj y las complicaciones al final del archivo, el sistema elimina toda una capa 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 la cara de reloj, usa el espacio en memoria. de evaluación, disponible en el repositorio watchface en GitHub.

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