Otimizar uma visualização personalizada

Quando 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.

Acelerar sua visualização

Para acelerar sua visualização, elimine código desnecessário de rotinas chamadas com frequência. Comece com onDraw(), que oferece o maior retorno. Em particular, elimine as alocações em onDraw(), porque elas podem levar a uma coleta de lixo que causa 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. Quando uma visualização chama requestLayout(), o sistema da interface do Android percorre toda a hierarquia de visualizações para descobrir o tamanho que cada uma precisa ter. Se houver medições conflitantes, poderá ser necessário percorrer a hierarquia várias vezes. Às vezes, os designers de UI criam hierarquias profundas de objetos ViewGroup aninhados. Essas hierarquias profundas de visualização causam problemas de desempenho. Por isso, faça com que elas sejam o mais superficiais possível.

Se você tem uma interface 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.

Por exemplo, se você tiver um ViewGroup personalizado que não ajusta o próprio tamanho para caber em todas as visualizações filhas, evite o trabalho de medir todas elas. Essa otimização não é possível se você usar os layouts integrados que atendem a uma ampla variedade de casos de uso.