android - ¿Qué significa VerifyClass dentro de Systrace?
android-recyclerview layout-inflater (2)
Estoy mirando el systrace
generado por mi aplicación y he identificado un marco que lleva demasiado tiempo. Esto es causado por un onCreateViewHolder
RecyclerView
al inflar mi vista de elementos. La vista de elementos es lo más plana posible con ConstraintLayout
. Pero el siguiente informe systrace
tiene muchos bloques VerifyClass
que tardan 17 ms cada uno.
¿Qué significa ese bloque VerifyClass
?
Es difícil decir exactamente qué está haciendo VerifyClass
, porque no forma parte de Android Java SDK o de ConstraintLayout. La única mención que encontré es en C parte de SDK:
Pero tengo un par de sugerencias:
1) Trate de construir su aplicación en modo de lanzamiento y vea si todavía tiene problemas con la caída de FPS. Mi suposición es que este VerifyClass se ejecuta para compilaciones de depuración para comparar ciertas cosas, pero eso es solo una suposición.
2) Si bien ConstraintLayout tiene una API conveniente y una jerarquía plana (que afecta positivamente a los cruces de dibujo), todavía tiene un proceso de diseño y medición mucho más lento que otros diseños de Android. La razón de esto es la complejidad del cálculo de restricciones. Por lo tanto, usarlo en un RecyclerView puede provocar un impacto significativo en el rendimiento durante la creación de ViewHolder. Si la jerarquía de la celda de la lista es lo suficientemente simple, sugiero cambiar a algunos diseños generales y verificar el comportamiento.
No es realmente un experto interno de C ++ / Android Runtime para explicar claramente lo que el método VerifyClass
definido en /art/runtime/class_linker.h e implementado en /art/runtime/class_linker.cc significa, pero no le prestaría tanta atención a su Tiempo de ejecución de la CPU
Lo que tomaría en consideración son los artículos de RecyclerView
que contienen ConstraintLayout
y cuya inflación consume el tiempo de la CPU .
En cuanto a la sugerencia de probar una compilación de lanzamiento, no hará ninguna diferencia: las llamadas al método nativo VerifyClass
se llevarán a cabo para compilaciones tanto de depuración como de lanzamiento.