19

任何人都可以解释scrolling cacheAndroid中的含义。我偶然发现了这个词,但在android官方网站或网络上都找不到解释。

我能找到的只是如何打开/关闭它。

谢谢。

4

4 回答 4

27

滚动缓存基本上是一个绘图缓存。

在 android 中,您可以要求 View 将其绘图存储在称为绘图缓存(基本上是位图)的缓存中。默认情况下,绘图缓存被禁用,因为它占用内存,但您可以要求视图通过 setDrawingCacheEnabled 或通过硬件层 (setLayerType) 显式创建一个。

那么它为什么有用呢?因为与在每一帧重绘视图相比,使用绘图缓存可以让您的动画更加流畅。

这种类型的动画也可以进行硬件加速,因为渲染系统可以获取此位图并将其作为纹理上传到 GPU(如果使用硬件层)并对其进行快速矩阵操作(如更改 alpha、平移、旋转)。与做动画相比,你在每一帧上都重绘(onDraw 被调用)。

在列表视图的情况下,当您通过滚动滚动时,您实质上是在为列表的视图设置动画(向上或向下移动它们)。列表视图使用其可见子项(以及边缘附近的一些潜在可见子项)的绘图缓存来非常快速地为它们设置动画。

使用绘图缓存有缺点吗?是的,它会消耗内存,这就是为什么默认情况下它在视图中是关闭的。在 ListView 的情况下,只要您触摸 ListView 并稍微移动(以区分轻击和滚动),就会自动为您创建缓存。换句话说,一旦 ListView 认为您将要滚动/翻动,它就会为您创建滚动缓存来为滚动/翻动运动设置动画。

于 2013-07-07T21:02:44.497 回答
1

scrollingCache 在《listView 的世界》讲座中有详细的讲解。

它基本上缓存了滚动本身,以便移动位图,但根据我的经验,它实际上让事情变得更慢并且占用内存并没有什么特别的。

scrollingCache 默认启用,至少对于 listView 。这就是为什么如果性能对您很重要,您应该考虑禁用它。

于 2014-06-29T06:52:54.120 回答
0

我认为您在谈论以下内容:

想象一个包含 50 个项目的列表,其中只有 10 个项目是可见的。Android 将缓存列表项中的下一个和上一个(估计)5 个项目。

当您开始滚动列表时,它将重用不可见的项目视图,使用 ArrayAdapter 的函数 getView() 例如,如果您滚动到顶部,它将在底部获取一个视图并将其与新数据一起放置在顶部。

所以滚动缓存是可见项目上方/下方的下一个和上一个项目。

于 2013-03-22T12:22:47.333 回答