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

Para oferecer a melhor duração de bateria possível para os dispositivos Wear OS, o sistema executa um cálculo de uso da memória. Como parte da qualidade de apps para Wear OS diretrizes, os mostradores que usam o Formato do mostrador do relógio têm limites para o 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 imagem ou fonte de bitmap no mostrador do relógio que usar o Formato do mostrador do relógio, o sistema concluirá as seguintes etapas:

  1. Descompacta a imagem ou a fonte do bitmap.
  2. Examina a fonte da imagem ou do bitmap para saber se ela pode ser otimizada em um dos 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 fonte 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 o 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 qualquer corte, redimensionamento ou reformatação foi aplicada.

Configurações

Em 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 ligeiramente quantos recursos são usados simultaneamente configurações diferentes.

Modo ambiente e camadas

Para o modo ambiente, o sistema presume que o relógio foi renderizado usando até três camadas em tela cheia, sendo que 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 é compostas nessa camada. Não importa quantas imagens são usadas para desenhamos essa camada o sistema conta isso como uma imagem em tela cheia.
  2. Qualquer ponteiro do relógio, tela digital ou complicações com vinculações de plataforma que são renderizados dinamicamente.
  3. Todos os elementos listados após os ponteiros do relógio e as complicações na arquivo XML de origem.

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

Métodos para reduzir o uso de memória

Seguindo as sugestões nesta seção, você terá mais chances de criar uma mostrador do relógio cujo consumo de memória permaneça 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 pelo mostrador do relógio, atualize os elementos na imagem e manter 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 mudando a cor de um círculo em vez de rolar o círculo pelo relógio rosto.

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, inclua apenas uma uma cópia dessa imagem no diretório de recursos e referenciá-la em vários vezes.

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. De colocando 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 no 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 consumo de memória avaliador, disponível no repositório watchface no GitHub.

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