任何人都可以解释scrolling cache
Android中的含义。我偶然发现了这个词,但在android官方网站或网络上都找不到解释。
我能找到的只是如何打开/关闭它。
谢谢。
任何人都可以解释scrolling cache
Android中的含义。我偶然发现了这个词,但在android官方网站或网络上都找不到解释。
我能找到的只是如何打开/关闭它。
谢谢。
滚动缓存基本上是一个绘图缓存。
在 android 中,您可以要求 View 将其绘图存储在称为绘图缓存(基本上是位图)的缓存中。默认情况下,绘图缓存被禁用,因为它占用内存,但您可以要求视图通过 setDrawingCacheEnabled 或通过硬件层 (setLayerType) 显式创建一个。
那么它为什么有用呢?因为与在每一帧重绘视图相比,使用绘图缓存可以让您的动画更加流畅。
这种类型的动画也可以进行硬件加速,因为渲染系统可以获取此位图并将其作为纹理上传到 GPU(如果使用硬件层)并对其进行快速矩阵操作(如更改 alpha、平移、旋转)。与做动画相比,你在每一帧上都重绘(onDraw 被调用)。
在列表视图的情况下,当您通过滚动滚动时,您实质上是在为列表的视图设置动画(向上或向下移动它们)。列表视图使用其可见子项(以及边缘附近的一些潜在可见子项)的绘图缓存来非常快速地为它们设置动画。
使用绘图缓存有缺点吗?是的,它会消耗内存,这就是为什么默认情况下它在视图中是关闭的。在 ListView 的情况下,只要您触摸 ListView 并稍微移动(以区分轻击和滚动),就会自动为您创建缓存。换句话说,一旦 ListView 认为您将要滚动/翻动,它就会为您创建滚动缓存来为滚动/翻动运动设置动画。
scrollingCache 在《listView 的世界》讲座中有详细的讲解。
它基本上缓存了滚动本身,以便移动位图,但根据我的经验,它实际上让事情变得更慢并且占用内存并没有什么特别的。
scrollingCache 默认启用,至少对于 listView 。这就是为什么如果性能对您很重要,您应该考虑禁用它。
我认为您在谈论以下内容:
想象一个包含 50 个项目的列表,其中只有 10 个项目是可见的。Android 将缓存列表项中的下一个和上一个(估计)5 个项目。
当您开始滚动列表时,它将重用不可见的项目视图,使用 ArrayAdapter 的函数 getView() 例如,如果您滚动到顶部,它将在底部获取一个视图并将其与新数据一起放置在顶部。
所以滚动缓存是可见项目上方/下方的下一个和上一个项目。
官方解释: http: //developer.android.com/reference/android/widget/AbsListView.html#attr_android :scrollingCache
Romain Guy关于缓存颜色提示优化的博客:http ://www.curious-creature.org/2008/12/22/why-is-my-list-black-an-android-optimization/