0

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

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

更新:上传正确的慢跟踪图像)

我将问题跟踪到内部视图绘制调用。这是运行缓慢时的 Android Studio 跟踪:

慢迹

这是快速时的跟踪:

快速追踪

很明显有罪的方法是android.view.ThreadedRenderer.draw(),但这是一个内部调用,我无法进一步测试。从跟踪中,我的理解是,不是绘图很慢,因为android.view.ThreadedRenderer.updateRootDisplayList()最终调用android.widget.AbsListView.draw()的在两个跟踪中都以同样快的速度完成。所以它必须android.view.ThreadedRenderer.draw()是导致这种情况的其余部分。

上网找ThreadedRenderer.java个班

我尝试过的事情:

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

  • 在 gridview 上强制软件渲染使列表总是滚动得很慢。

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

4

2 回答 2

0

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

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

于 2015-05-19T14:34:55.220 回答
0

我最近遇到了类似的问题。您需要检查 xml 文件中的布局数量。

滚动视图上的相对或线性布局越多,它的速度就越慢。

发布您的 xml 文件少见。

于 2019-03-23T18:05:30.367 回答