我有一个GridView,其缩略图图像是在一个单独的线程中加载的。在完成所有缩略图加载后,如果我滚动网格视图它一直很慢(~5fps),直到我向下滚动几行,然后它立即滚动得非常快(~30fps),即使我再次向上滚动。
如果我重新填充gridview,它会再次变慢,直到我向下滚动一些。这不是回收意见的问题,因为我已经这样做了。
(更新:上传了正确的慢速跟踪图片)
我将问题跟踪到内部视图绘制调用。以下是适用于慢速的Android Studio跟踪:
以下是速度快的追踪:
很明显,有罪的方法是android.view.ThreadedRenderer.draw()
,但这是一个内部呼叫,我无法进一步测试。从跟踪中,我的理解是,绘图并不慢,因为最终调用android.view.ThreadedRenderer.updateRootDisplayList()
的{{1}}在两条轨迹中都能快速完成。所以它必须是造成这种情况的android.widget.AbsListView.draw()
的其余部分。
在网上找到the ThreadedRenderer.java
class
我尝试过的事情:
强制在gridview上进行硬件渲染没有任何区别。
在gridview上强制进行软件渲染使列表始终滚动得非常慢。
为什么会发生这种情况的任何想法?
答案 0 :(得分:0)
嗯,第一次滚动后滚动速度要快得多的原因是Android正在回收视图。这意味着最初需要花费大量时间来构建视图。
我觉得你有点太深了。您应该检查以确保在draw
期间没有同步下载缩略图。尝试删除下载图像的代码,或将URL设置为“”。从本质上讲,尝试剥离缩略图视图,直到找出问题所在。这应该有助于您走上正确的轨道。
答案 1 :(得分:0)
我最近有一个类似的问题。 您需要检查xml文件中的布局数。
滚动视图上的相对或线性布局越多,它变得越慢。
发布您的xml文件少见。