Otimizar uma visualização personalizada

Quando você tiver uma visualização bem projetada que responde a gestos e transições entre estados, verifique se ela é executada rapidamente. Para evitar uma interface lenta ou oscilando durante a reprodução, confira se as animações são executadas de forma consistente a 60 quadros por segundo.

Acelere a 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. Especificamente, elimine 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. Nunca faça uma alocação enquanto uma animação estiver em execução.

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

Outra operação muito cara é transferir layouts. Quando uma visualização chama requestLayout(), o sistema de interface do Android passa por toda a hierarquia de visualização para descobrir o tamanho que cada visualização precisa ter. Se encontrar medidas conflitantes, ele poderá passar pela hierarquia várias vezes. Às vezes, os designers de IU criam hierarquias profundas de objetos ViewGroup aninhados. Essas hierarquias de visualização profundas causam problemas de performance. Portanto, use essas hierarquias o mais superficiais possível.

Se você tem uma interface complexa, escreva um ViewGroup personalizado para executar o layout. Ao contrário das visualizações integradas, a visualização personalizada pode fazer suposições específicas do aplicativo sobre o tamanho e a forma dos filhos e, portanto, evitar passar pelos filhos para calcular medidas.

Por exemplo, se você tiver um ViwGroup personalizado que não ajusta o próprio tamanho para caber em todas as visualizações filhas, evitará a sobrecarga da medição de todas as visualizações filhas. Essa otimização não será possível se você usar os layouts integrados que atendem a uma ampla variedade de casos de uso.