Systrace 中的 VerifyClass 是什么意思?
What does VerifyClass inside Systrace mean?
我正在查看由我的应用程序生成的 systrace
,我发现一个帧花费的时间太长。
这是由 RecyclerView
的 onCreateViewHolder
在膨胀我的项目视图时引起的。 ConstraintLayout
项目视图尽可能平坦。但是下面的 systrace
报告有很多 VerifyClass
个块,每个块需要 17 毫秒。
VerifyClass
块是什么意思?
很难说 VerifyClass
到底在做什么,因为它不是 Android Java SDK 或 ConstraintLayout 的一部分。我发现的唯一提及是在 SDK 的 C 部分:
但我有几个建议:
1) 尝试在发布模式下构建您的应用,看看您是否仍然遇到 FPS 下降问题。我的假设是,此 VerifyClass 是针对调试版本执行的,以对某些事物进行基准测试,但这只是一个猜测。
2) 虽然 ConstraintLayout 具有方便的 API 和扁平的层次结构(这对绘图遍历有积极影响),但它仍然 比其他 更慢的测量和布局过程 Android 布局。这样做的原因是约束计算的复杂性。因此,在 RecyclerView 中使用它可能会在 ViewHolder 创建期间导致显着的性能下降。
如果列表单元格的层次结构足够简单,我建议切换到一些原始布局并检查行为。
不是真正的C++/Android运行时内部专家,无法清楚地解释/art/runtime/class_linker.h and implemented in /art/runtime/class_linker.cc中定义的VerifyClass
方法的含义,但我不会太在意它的 CPU 执行时间。
我要考虑的是您的 RecyclerView
项目包含 ConstraintLayout
并且其 inflation 消耗 CPU 时间。
关于尝试发布版本的建议,这不会有任何区别 - 调试和发布版本都会调用本机 VerifyClass
方法。
我正在查看由我的应用程序生成的 systrace
,我发现一个帧花费的时间太长。
这是由 RecyclerView
的 onCreateViewHolder
在膨胀我的项目视图时引起的。 ConstraintLayout
项目视图尽可能平坦。但是下面的 systrace
报告有很多 VerifyClass
个块,每个块需要 17 毫秒。
VerifyClass
块是什么意思?
很难说 VerifyClass
到底在做什么,因为它不是 Android Java SDK 或 ConstraintLayout 的一部分。我发现的唯一提及是在 SDK 的 C 部分:
但我有几个建议:
1) 尝试在发布模式下构建您的应用,看看您是否仍然遇到 FPS 下降问题。我的假设是,此 VerifyClass 是针对调试版本执行的,以对某些事物进行基准测试,但这只是一个猜测。
2) 虽然 ConstraintLayout 具有方便的 API 和扁平的层次结构(这对绘图遍历有积极影响),但它仍然 比其他 更慢的测量和布局过程 Android 布局。这样做的原因是约束计算的复杂性。因此,在 RecyclerView 中使用它可能会在 ViewHolder 创建期间导致显着的性能下降。 如果列表单元格的层次结构足够简单,我建议切换到一些原始布局并检查行为。
不是真正的C++/Android运行时内部专家,无法清楚地解释/art/runtime/class_linker.h and implemented in /art/runtime/class_linker.cc中定义的VerifyClass
方法的含义,但我不会太在意它的 CPU 执行时间。
我要考虑的是您的 RecyclerView
项目包含 ConstraintLayout
并且其 inflation 消耗 CPU 时间。
关于尝试发布版本的建议,这不会有任何区别 - 调试和发布版本都会调用本机 VerifyClass
方法。