我不是一个精通于C++/Android Runtime internals的专家,无法清楚地解释/art/runtime/class_linker.h中定义并在/art/runtime/class_linker.cc中实现的VerifyClass
方法的含义,但我不会过多关注它的CPU执行时间。
我会考虑你的RecyclerView
项,其中包含ConstraintLayout
,其膨胀会消耗CPU时间。
关于尝试发布版本的建议,这不会有任何区别 - 对本机VerifyClass
方法的调用将为调试和发布版本都执行。
很难说VerifyClass
到底做了什么,因为它不是Android Java SDK或ConstraintLayout的一部分。我找到的唯一提到它的地方是在SDK的C部分中:
但我有几个建议:
1)尝试以发布模式构建应用程序,并查看是否仍然存在FPS下降问题。我的假设是,对于调试构建,会执行此VerifyClass来基准测试某些内容,但这只是一个猜测。
2)虽然ConstraintLayout具有方便的API和扁平层次结构(这对绘图遍历产生积极影响),但其测量和布局过程仍然比其他Android布局慢得多。造成这种情况的原因是约束计算的复杂性。因此,在RecyclerView中使用它可能会在ViewHolder创建期间导致显著的性能损失。 如果列表单元格的层次结构足够简单,建议切换到一些普通的布局并检查其行为。