Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Systrace显示performTraversals和getDisplayList需要很长时间_Android_Performance_Systrace - Fatal编程技术网

Android Systrace显示performTraversals和getDisplayList需要很长时间

Android Systrace显示performTraversals和getDisplayList需要很长时间,android,performance,systrace,Android,Performance,Systrace,我有一个gridView,屏幕上一次显示20个自定义组件(作为grid view项)。滚动视图是非常不稳定的,我正在试图确定原因。我的systrace(如下所示)显示了花费在performTraversals和getDisplayList上的大量时间(大约40毫秒),但我不知道它们在做什么。我为onMeasure、onLayout和onDraw添加了自定义跟踪。相比之下,这些都很小 我不确定下一步该去哪里,以确定什么在占用所有的时间 所以这是非常具体的。问题是,当GridView滚动时,我需要使

我有一个gridView,屏幕上一次显示20个自定义组件(作为grid view项)。滚动视图是非常不稳定的,我正在试图确定原因。我的systrace(如下所示)显示了花费在performTraversals和getDisplayList上的大量时间(大约40毫秒),但我不知道它们在做什么。我为onMeasure、onLayout和onDraw添加了自定义跟踪。相比之下,这些都很小

我不确定下一步该去哪里,以确定什么在占用所有的时间


所以这是非常具体的。问题是,当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吗?()