rst*_*ler 2 performance android systrace
我有一个gridView,一次在屏幕上显示20个自定义组件(作为网格视图项).滚动视图非常不稳定,我正在尝试确定原因.我的systrace(如下所示)显示了在performTraversals和getDisplayList(大约40ms)上花费了大量时间,但我不知道他们在做什么.我为onMeasure,onLayout和onDraw添加了自定义跟踪.相比之下,这些都很小.
我不知道下一步该去哪里确定一直在占用什么......

所以这最终变得非常具体.问题是我需要在GridView滚动时使GridView中的项无效,因为它们是需要重绘自定义的自定义控件.从GridView OnScroll,我调用了GridView.invalidateViews().事实证明,这非常缓慢.我用以下内容替换它:
for(int visiblePosition = 0; visiblePosition <= mGridView.getLastVisiblePosition() - mGridView.getFirstVisiblePosition(); visiblePosition++) {
mGridView.getChildAt(visiblePosition).invalidate();
}
Run Code Online (Sandbox Code Playgroud)
这个小循环比invalidateViews快得多.我没有查看代码来确定原因.
那么,我是如何确定这是问题的?所有这些花哨的工具都没有真正帮助.相反,我使用了一些很好的"时尚评论".我一直在削减滚动时发生的所有事情,这就是产生差异的线条.我的帧从大约50ms到大约8ms.
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |