android android-recyclerview layout-inflater systrace

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:

http://www.androidpolice.com/android_aosp_changelogs/android-m-preview-2-to-android-7.0.0_r1-AOSP-changelog.html

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.