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

时间:2017-10-12 05:06:17

标签: android android-recyclerview layout-inflater systrace

我正在查看我的应用生成的systrace,并且我发现了一个耗时太长的帧。 这是由于RecyclerView onCreateViewHolder在我的项目视图展开时造成的。项目视图与ConstraintLayout一样平坦。但是下面的systrace报告有很多VerifyClass块,每个块需要17毫秒。

VerifyClass阻止意味着什么?

enter image description here

2 个答案:

答案 0 :(得分:3)

很难说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创建过程中造成重大性能损失。 如果列表单元格的层次结构足够简单,我建议切换到一些vanilla布局并检查行为。

答案 1 :(得分:3)

不是真正的 C ++ / Android运行时内部专家,可以清楚地解释/art/runtime/class_linker.h中定义的VerifyClass方法并在/art/runtime/class_linker.cc中实现的方法,但我不知道不太注意其 CPU 的执行时间。

我要考虑的是您的RecyclerView项目包含ConstraintLayout且其通胀消耗 CPU 时间。

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

相关问题