Para oferecer a melhor duração de bateria possível dos dispositivos Wear OS, o sistema realiza um cálculo de uso de 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 de memória de um mostrador do relógio
Para calcular o tamanho ocupado por uma imagem ou fonte de bitmap em um mostrador do relógio que usa o formato de mostrador do relógio, o sistema conclui as seguintes etapas:
- Descompacta a imagem ou a fonte do bitmap.
- Examina a fonte de imagem ou bitmap para saber se ela pode ser otimizada de uma das
seguintes maneiras:
- Redimensionado para corresponder melhor ao tamanho de exibição.
- Cortado 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 fonte de imagem ou bitmap, em bytes, de uma das seguintes maneiras:
- 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:
- O tamanho não processado de qualquer fonte vetorial.
- O uso estimado da fonte padrão do sistema.
- O tamanho total das imagens e fontes de bitmap depois que o corte, o redimensionamento ou a reformatação foram aplicados.
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. Ocasionalmente, quando há um número muito grande de combinações, o sistema superestima um pouco quantos recursos são 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:
- Tudo 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 considera como uma imagem em tela cheia.
- Todos os ponteiros do relógio, telas digitais ou complicações com vinculações de plataforma renderizadas dinamicamente.
- 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 de memória no modo ambiente vem de fontes de bitmap, principalmente as grandes.
Métodos para reduzir o uso de memória
Seguindo as sugestões desta seção, você terá mais chances de criar um mostrador do relógio com o 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 na imagem 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, mude 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, inclua apenas uma cópia dessa imagem no diretório de recursos e faça referência a ela várias 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. 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 de 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.