Android GridView慢滚动,然后非常快速滚动

时间:2015-05-19 14:23:38

标签: android performance gridview dynamic-image-generation

我有一个GridView,其缩略图图像是在一个单独的线程中加载的。在完成所有缩略图加载后,如果我滚动网格视图它一直很慢(~5fps),直到我向下滚动几行,然后它立即滚动得非常快(~30fps),即使我再次向上滚动。

如果我重新填充gridview,它会再次变慢,直到我向下滚动一些。这不是回收意见的问题,因为我已经这样做了。

更新:上传了正确的慢速跟踪图片)

我将问题跟踪到内部视图绘制调用。以下是适用于慢速的Android Studio跟踪:

slow trace

以下是速度快的追踪:

fast trace

很明显,有罪的方法是android.view.ThreadedRenderer.draw(),但这是一个内部呼叫,我无法进一步测试。从跟踪中,我的理解是,绘图并不慢,因为最终调用android.view.ThreadedRenderer.updateRootDisplayList()的{​​{1}}在两条轨迹中都能快速完成。所以它必须是造成这种情况的android.widget.AbsListView.draw()的其余部分。

在网上找到the ThreadedRenderer.java class

我尝试过的事情:

  • 强制在gridview上进行硬件渲染没有任何区别。

  • 在gridview上强制进行软件渲染使列表始终滚动得非常慢。

为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:0)

嗯,第一次滚动后滚动速度要快得多的原因是Android正在回收视图。这意味着最初需要花费大量时间来构建视图。

我觉得你有点太深了。您应该检查以确保在draw期间没有同步下载缩略图。尝试删除下载图像的代码,或将URL设置为“”。从本质上讲,尝试剥离缩略图视图,直到找出问题所在。这应该有助于您走上正确的轨道。

答案 1 :(得分:0)

我最近有一个类似的问题。 您需要检查xml文件中的布局数。

滚动视图上的相对或线性布局越多,它变得越慢。

发布您的xml文件少见。