Otimizar mostradores de relógio

A tela de relógio do Wear OS é executada de forma contínua e, portanto, precisa usar energia de modo eficiente.

Otimize a performance do mostrador do relógio o máximo possível. Esta página oferece práticas recomendadas para otimizações gerais de mostradores de relógio, bem como de animações e imagens.

Otimização básica

Esta seção contém práticas recomendadas para melhorar a eficiência geral do mostrador do relógio.

Cor e brilho do mostrador do relógio

O uso de cores escuras no mostrador de relógio consome menos energia do relógio do usuário. Confira a seguir recomendações para configurar o plano de fundo do mostrador do relógio e otimizar o uso da bateria:

  • Cor: sempre que possível, use um plano de fundo preto.
  • Brilho: quando não é possível usar um plano de fundo preto, mantenha o brilho da cor de fundo em 25% ou menos em uma escala de matiz, saturação e valor (HSV, na sigla em inglês) ou de matiz, saturação e brilho (HSB, na sigla em inglês). Por exemplo, se você usar a classe Color para configurar uma cor de plano de fundo definida com a escala HSV, use 25 ou menos para a configuração de valor, que controla o brilho.

Usar recursos dinâmicos para interagir com o smartphone

Quando um mostrador do relógio exigir uma operação no smartphone, execute o código somente quando o mostrador estiver ativo. O método recomendado para permitir que o app no smartphone saiba que o mostrador do relógio correspondente está ativo é a API CapabilityClient.

Monitorar o consumo de energia

O app Wear OS complementar permite que os desenvolvedores e usuários vejam a quantidade de bateria consumida por diferentes processos no dispositivo wearable. Para isso, acesse Configurações > Bateria do relógio.

Registrar mostradores de relógio com reconhecimento de criptografia

O Android 7.0 e versões mais recentes tem suporte para criptografia baseada em arquivo e permite que aplicativos com reconhecimento de criptografia sejam executados antes de o usuário informar a senha de descriptografia durante a inicialização. Isso pode diminuir o tempo de mudança da animação de inicialização para o mostrador do relógio em até 30 segundos.

Para agilizar a inicialização, adicione android:directBootAware="true" ao manifesto do mostrador do relógio.

Observação: use esse recurso com mostradores de relógio que não utilizam armazenamento criptografado por credencial.

Práticas recomendadas para animações

As práticas recomendadas nesta seção ajudam a reduzir o consumo de energia associado às animações.

Reduzir a frame rate das animações

No geral, as animações usam recursos computacionais dispendiosos e consomem uma quantidade significativa de energia. A maioria delas apresenta fluidez a 30 quadros por segundo, então evite a execução com uma taxa de quadros maior. Em vez disso, você pode usar taxas de quadros dinâmicas. Para mais informações, consulte o exemplo de mostrador do relógio (link em inglês).

Colocar a CPU no modo de suspensão entre as animações

Para maximizar a duração da bateria, use animações com moderação. Até um ponto piscando consome energia da bateria a cada piscada.

As animações e pequenas mudanças no conteúdo do mostrador do relógio ativam a CPU. Faça a CPU entrar no modo de suspensão entre as animações usando, por exemplo, bursts breves de animação a cada segundo no modo interativo e deixando a CPU em suspensão no segundo seguinte. Colocar a CPU em suspensão com frequência, mesmo que por breves instantes, pode reduzir significativamente o consumo de energia.

Práticas recomendadas para imagens

As práticas recomendadas nesta seção ajudam a reduzir o consumo de energia associado às imagens.

Reduzir o tamanho dos recursos de bitmap

Muitos mostradores de relógio consistem em uma imagem de fundo e outros recursos gráficos que são transformados e sobrepostos à imagem de fundo, como os ponteiros do relógio e outros elementos que se movem com o tempo. Quanto maiores esses recursos gráficos, mais recursos computacionais dispendiosos serão necessários para fazer a transformação deles. Normalmente, esses elementos gráficos são girados e às vezes redimensionados dentro do método Render.CanvasRenderer.render() toda vez que o sistema redesenha o mostrador do relógio, conforme descrito em Desenhar um mostrador de relógio.

Figura 1. Corte os ponteiros do relógio para remover os pixels extras.

A redução do tamanho dos recursos de bitmap melhora a performance das animações e economiza energia. Siga estas dicas para melhorar a performance do mostrador do relógio:

  • Não use elementos gráficos maiores do que o necessário.
  • Remova pixels extras transparentes ao redor das bordas.

Por exemplo, o tamanho da imagem do ponteiro do relógio à esquerda na figura 1 pode ser reduzido em 97% removendo os pixels extras transparentes, conforme mostrado no lado direito da figura.

Combinar recursos de bitmap

Se você tem bitmaps que geralmente são desenhados juntos, combine-os em um único recurso gráfico. Por exemplo, muitas vezes, é possível combinar a imagem de fundo no modo interativo com as marcações para não ter que desenhar dois bitmaps de tela cheia sempre que o sistema redesenhar o mostrador do relógio.

Desativar a suavização ao desenhar bitmaps dimensionados

Ao desenhar um bitmap dimensionado no objeto Canvas usando o método Canvas.drawBitmap(), você pode informar uma instância de Paint para configurar várias opções. A suavização usando o método setAntiAlias() não afeta os bitmaps, então ela pode ser desativada para melhorar a performance.

Figura 2. Exemplo de filtro de bitmap desativado (à esquerda) e ativado (à direita).

Usar filtragem de bitmap

Para recursos de bitmap que você desenha sobre outros elementos, ative a filtragem na mesma instância de Paint usando o método setFilterBitmap(). A Figura 2 mostra uma visualização ampliada de um ponteiro de relógio com e sem filtragem de bitmap.

Observação: quando estiver no modo ambiente, desative a filtragem de bitmap. No modo ambiente com poucos bits, o sistema não renderiza corretamente as cores na imagem, o que impede a filtragem de bitmap.

Eliminar operações dispendiosas do método de desenho

O sistema chama o método Render.CanvasRenderer.render() sempre que redesenha o mostrador do relógio. Para melhorar a performance, inclua apenas operações nesse método que sejam estritamente necessárias para atualizar o mostrador do relógio.

Quando possível, evite realizar as seguintes operações no método Render.CanvasRenderer.render():

  • Carregar imagens e outros recursos
  • Redimensionar imagens
  • Alocar objetos
  • Fazer cálculos cujos resultados não mudam entre os quadros

Para analisar a performance do mostrador do relógio, use o CPU Profiler. Especificamente, garanta que o tempo para executar a implementação do Render.CanvasRenderer.render() seja curto e consistente em todas as invocações. Para mais informações, consulte Inspecionar atividades de CPU com o CPU Profiler.

O app de exemplo de mostrador do relógio (link em inglês) demonstra as práticas recomendadas para configurar um mostrador.