Participe do evento ⁠#Android11: apresentação de lançamento da versão Beta no dia 3 de junho.

Como otimizar a visualização

Agora que você tem uma visualização bem projetada que responde a gestos e transições entre estados, verifique se ela é rápida. Para evitar uma interface do usuário que pareça lenta ou trave durante a reprodução, verifique se as animações são executadas consistentemente a 60 quadros por segundo.

Faça menos e com menos frequência

Para acelerar sua visualização, elimine código desnecessário de rotinas chamadas com frequência. Comece trabalhando no onDraw(), que trará o maior retorno. Em particular, elimine as alocações no onDraw(), porque elas podem levar a uma coleta de lixo que causaria um travamento. Aloque objetos durante a inicialização ou entre animações. Não faça alocações enquanto uma animação estiver sendo executada.

Além de tornar o onDraw() mais enxuto, verifique também se ele é chamado com a menor frequência possível. A maioria das chamadas para onDraw() são o resultado de uma chamada para invalidate(). Assim, elimine chamadas desnecessárias para invalidate().

Outra operação muito cara é transferir layouts. Sempre que uma visualização chama requestLayout(), o sistema da IU do Android precisa percorrer toda a hierarquia de visualizações para descobrir o tamanho que cada visualização precisa ter. Se houver medições conflitantes, poderá ser necessário percorrer a hierarquia várias vezes. Às vezes, os designers de IU criam hierarquias profundas de objetos ViewGroup aninhados para que a IU se comporte corretamente. Essas hierarquias profundas de visualização causam problemas de desempenho. Faça suas hierarquias de visualização o mais superficiais possível.

Se você tem uma IU complexa, escreva um ViewGroup personalizado para executar o layout. Diferentemente das visualizações incorporadas, sua visualização personalizada pode fazer suposições específicas para aplicativos sobre o tamanho e a forma dos filhos. Assim, não precisa percorrê-los para calcular medidas. O exemplo do PieChart mostra como estender ViewGroup como parte de uma visualização personalizada. O PieChart tem visualizações filhas, mas nunca as mede. Em vez disso, ele define os tamanhos diretamente de acordo com o próprio algoritmo de layout personalizado.