Otimizar o uso da memória para o mostrador do relógio

Para oferecer a melhor duração da bateria possível para dispositivos Wear OS, o sistema realiza um cálculo de uso da memória. Como parte das diretrizes de qualidade de apps para Wear OS, os mostradores de relógio que usam o Formato do mostrador do relógio têm limites na quantidade de memória que podem consumir, dependendo do estado atual do relógio:

  • No modo ambiente, o mostrador do relógio não pode consumir mais de 10 MB de memória.
  • No modo interativo, o mostrador não pode consumir mais de 100 MB de memória.

O sistema calcula o uso da memória do mostrador do relógio

Para calcular o tamanho ocupado por uma fonte de imagem ou bitmap em um mostrador do relógio que usa o formato do mostrador do relógio, o sistema conclui estas etapas:

  1. Descompacta a imagem ou a fonte do bitmap.
  2. Examina a imagem ou a fonte do bitmap para saber se ela pode ser otimizada de uma das seguintes maneiras:
    • Redimensionada para corresponder melhor ao tamanho de exibição.
    • Cortada para remover pixels totalmente transparentes.
    • Rebaixado para RGB565, se isso puder ser feito sem perda de fidelidade.

Com base na caixa delimitadora resultante, o sistema calcula o tamanho da imagem ou da fonte de bitmap, em bytes, como um dos seguintes:

  • Para imagens e fontes que usam RGBA8888: \( 4 \times width \times height \)
  • Para imagens e fontes que usam RGB565: \( 2 \times width \times height \)
  • Para imagens e fontes que usam a configuração de bitmap ALPHA_8: \( width \times height \)

Modo interativo

Ao calcular o uso da memória para o modo interativo, o sistema calcula a soma do seguinte:

  1. O tamanho não processado de fontes vetoriais.
  2. O uso estimado da fonte padrão do sistema.
  3. O tamanho total das imagens e fontes de bitmap após a aplicação de qualquer corte, redimensionamento ou reformatação.

Configurações

Para mostradores de relógio que contêm configurações, o sistema tenta calcular o tamanho total dos recursos usados nas diferentes configurações. Às vezes, quando há um número muito grande de combinações, o sistema superestima um pouco a quantidade de recursos usados simultaneamente nas diferentes configurações.

Modo ambiente e camadas

Para o modo ambiente, o sistema presume que o relógio foi renderizado usando até três camadas de tela cheia. Duas delas são completamente estáticas:

  1. Tudo o que está abaixo dos elementos do relógio. A maior parte do "corpo" do mostrador do relógio é composta nessa camada. Não importa quantas imagens são usadas para desenhar essa camada. O sistema a conta como uma imagem em tela cheia.
  2. Todos os ponteiros do relógio, telas digitais ou complicações com vinculações de plataforma renderizadas dinamicamente.
  3. Todos os elementos listados após os ponteiros do relógio e as complicações no arquivo XML de origem.

Normalmente, a maior parte do uso da memória no modo ambiente vem de fontes de bitmap, especialmente as grandes.

Métodos para reduzir o uso de memória

Seguindo as sugestões nestas seções, você terá mais chances de criar um mostrador do relógio com consumo de memória dentro desses limites.

Cortar e redimensionar fontes de bitmap

Corte e redimensione as imagens e os objetos BitmapFont para que correspondam ao tamanho de exibição.

Quando o Wear OS renderiza um mostrador do relógio, todas as imagens são descompactadas. Uma imagem em tela cheia quase em branco pode consumir 3 KB no disco. Porém, se ela aparecer em uma tela de 450 x 450 pixels, o sistema descompactará a imagem, aumentando o tamanho dela para 750 KB ou mais na memória.

Usar alturas consistentes de fontes de bitmap

Ao usar uma BitmapFont, todas as imagens de um caractere precisam ter a mesma altura. Da mesma forma, todas as imagens de palavras precisam ter a mesma altura.

Usar tamanhos de frame consistentes em animações

Em vez de mover uma imagem em um mostrador do relógio, atualize os elementos dela e mantenha a caixa delimitadora no mesmo local em relação ao mostrador do relógio. Por exemplo, se você quiser animar um círculo no mostrador do relógio, considere mudar a cor de um círculo em vez de rolar o círculo no mostrador do relógio.

Essa técnica reduz o tamanho da caixa delimitadora que o sistema calcula para a animação.

Eliminar a duplicação de imagens

Se o mostrador do relógio mostrar várias cópias da mesma imagem, carregue apenas uma cópia dessa imagem na memória e faça várias referências a ela.

Mostrar progresso usando arcos

Para emular uma barra de progresso que é concluída após um minuto ou após uma hora, não use 60 imagens separadas. Em vez disso, crie um objeto Arc contendo uma expressão que controle o comprimento dele, conforme mostrado no snippet de código abaixo:

<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 uma linha não contínua, por exemplo, para criar uma aparência retrô no estilo de relógio digital, use uma propriedade de traço para um objeto Stroke ou uma máscara semitransparente de sobreposição de imagem.

Coloque os ponteiros e as complicações do relógio no final do arquivo de origem

Os nós XML são desenhados na ordem em que estão listados no arquivo XML de origem. Ao colocar os ponteiros e as complicações do relógio no final do arquivo, o sistema elimina uma camada inteira do cálculo de memória do modo ambiente.

Avaliar o uso da memória do mostrador do relógio

Para medir o uso da memória do mostrador do relógio, use o avaliador de consumo de memória, disponível no repositório watchface (link em inglês) no GitHub.

  • Observação: o texto do link aparece quando o JavaScript está desativado.
  • Arc
  • Line
  • Rectangle