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 rápidamente. Para evitar una IU lenta o inestable durante la reproducción, asegúrate de que las animaciones se ejecuten de manera coherente a 60 fotogramas por segundo.

Cómo aumentar la velocidad de la vista

Para acelerar tu vista, elimina el código innecesario de las rutinas que se llaman con frecuencia. Comienza con onDraw(), que te brinda el mayor retorno. En particular, elimina las asignaciones en onDraw(), ya que las asignaciones pueden conducir a una recolección de elementos no utilizados que provoca 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 se llame con la menor frecuencia 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 superficiales posible.

Si tienes una IU compleja, considera escribir un ViewGroup personalizado para realizar su diseño. A diferencia de las vistas integradas, tu 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 sus elementos secundarios para calcular las mediciones.

Por ejemplo, si tienes un ViwGroup personalizado que no ajusta su propio tamaño para adaptarse a todas sus vistas secundarias, evita 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 gama de casos prácticos.