Android Systrace显示performTraversals和getDisplayList需要很长时间
我有一个gridView,屏幕上一次显示20个自定义组件(作为grid view项)。滚动视图是非常不稳定的,我正在试图确定原因。我的systrace(如下所示)显示了花费在performTraversals和getDisplayList上的大量时间(大约40毫秒),但我不知道它们在做什么。我为onMeasure、onLayout和onDraw添加了自定义跟踪。相比之下,这些都很小 我不确定下一步该去哪里,以确定什么在占用所有的时间Android Systrace显示performTraversals和getDisplayList需要很长时间,android,performance,systrace,Android,Performance,Systrace,我有一个gridView,屏幕上一次显示20个自定义组件(作为grid view项)。滚动视图是非常不稳定的,我正在试图确定原因。我的systrace(如下所示)显示了花费在performTraversals和getDisplayList上的大量时间(大约40毫秒),但我不知道它们在做什么。我为onMeasure、onLayout和onDraw添加了自定义跟踪。相比之下,这些都很小 我不确定下一步该去哪里,以确定什么在占用所有的时间 所以这是非常具体的。问题是,当GridView滚动时,我需要使
所以这是非常具体的。问题是,当GridView滚动时,我需要使GridView中的项无效,因为它们是需要重新绘制自身的自定义控件。在GridView OnScroll中,我调用了GridView.invalidateViews()。事实证明,这是非常缓慢的。我将其替换为以下内容:
for(int visiblePosition = 0; visiblePosition <= mGridView.getLastVisiblePosition() - mGridView.getFirstVisiblePosition(); visiblePosition++) {
mGridView.getChildAt(visiblePosition).invalidate();
}
for(int visiblePosition=0;visiblePosition)转到AOSP,查看这些函数的代码,找出它们在做什么以及为什么需要这么长时间?然后看看是否可以进行优化以避免它?这就是视图层次结构的工作。您使用hierarchyviewer查看过UI吗?()