Cómo optimizar una vista personalizada

Cuando tengas una vista bien diseñada que responda a gestos y transiciones entre estados, asegúrate de que se ejecute con rapidez. Para evitar una IU lenta o inestable durante la reproducción, asegúrate de que las animaciones se ejecuten de forma coherente a 60 fotogramas por segundo.

Acelera tu vista

Para acelerar tu vista, elimina el código innecesario de las rutinas que se llaman con frecuencia. Comienza con onDraw(), que te dará el mayor beneficio. En particular, elimina las asignaciones en onDraw(), ya que podrían conducir a una recolección de elementos no utilizados que cause inestabilidades. Asigna objetos durante la inicialización o entre animaciones. Nunca hagas una asignación mientras se ejecuta una animación.

Además de agilizar onDraw(), asegúrate de que reciba la menor cantidad de llamadas posible. La mayoría de las llamadas a onDraw() son el resultado de una llamada a invalidate(), por lo que debes eliminar las llamadas innecesarias a invalidate().

Otra operación muy costosa es desviar diseños. Cuando una vista llama a requestLayout(), el sistema de IU de Android recorre toda la jerarquía de vistas para determinar el tamaño que debe tener cada vista. Si encuentra mediciones en conflicto, es posible que atraviese la jerarquía varias veces. Los diseñadores de IU a veces crean jerarquías detalladas de objetos ViewGroup anidados. Estas jerarquías de vistas detalladas causan problemas de rendimiento, por lo que debes hacer que tus jerarquías de vistas sean lo más simples posible.

Si tienes una IU compleja, considera crear un ViewGroup personalizado para realizar su diseño. A diferencia de las vistas integradas, la vista personalizada puede hacer suposiciones específicas de la aplicación sobre el tamaño y la forma de sus elementos secundarios y, por lo tanto, evitar el desvío de los elementos secundarios para calcular las medidas.

Por ejemplo, si tienes un ViewGroup personalizado que no ajusta su propio tamaño para adaptarse a todas sus vistas secundarias, evitas la sobrecarga de medir todas las vistas secundarias. Esta optimización no es posible si usas los diseños integrados que se adaptan a una amplia variedad de casos de uso.