什么是Systrace内的VerifyClass意味着什么?

Osc*_*dez 11 android layout-inflater systrace android-recyclerview

我正在查看systrace我的应用程序生成的内容,并确定了一个耗时太长的框架.这是由引起RecyclerViewonCreateViewHolder膨胀我的项目视图时.项目视图与posible一样平坦ConstraintLayout.但是下面的systrace报告有很多VerifyClass块,每个块需要17毫秒.

这是什么VerifyClass块呢?

在此输入图像描述

Oni*_*nik 5

不是一个真正的C ++ / Android的运行时内部专家解释清楚什么该VerifyClass定义方法/art/runtime/class_linker.h和实施/art/runtime/class_linker.cc手段,但我不会支付那么多注意它的CPU执行时间处理时间。

我要考虑的是您的RecyclerView物品包含ConstraintLayout并且其通货膨胀消耗CPU时间。

关于尝试发布版本的建议,它不会有任何区别 -VerifyClass将针对调试和发布版本调用本机方法。


Dim*_*zis 4

很难说到底VerifyClass在做什么,因为它不是 Android Java SDK 或 ConstraintLayout 的一部分。我发现唯一提到的是 SDK 的 C 部分:

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

但我有几个建议:

1) 尝试在发布模式下构建您的应用程序,看看您是否仍然遇到 FPS 下降的问题。我的假设是,这个VerifyClass是为了调试构建而执行的,以对某些事情进行基准测试,但这只是一个猜测。

2) 虽然 ConstraintLayout 具有方便的 API 和扁平的层次结构(这对绘图遍历有积极影响),但它的 测量和布局过程仍然比其他 Android 布局慢得多。其原因是约束计算的复杂性。因此,在 RecyclerView 中使用它可能会导致 ViewHolder 创建期间的性能显着下降。如果列表单元格的层次结构足够简单,我建议切换到一些普通布局并检查行为。