深入理解Android RecyclerView的缓存机制

Posted xiangzhihong8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Android RecyclerView的缓存机制相关的知识,希望对你有一定的参考价值。

我们知道,RecyclerView在大量数据时依然可以丝滑般顺畅的滑动,那它究竟是怎么实现的呢,而RecyclerView之所以好用得益于它优秀的缓存机制。

我们知道,RecyclerView本身是一个ViewGroup,因此在滑动时就避免不了添加或移除子View(子View通过RecyclerView#Adapter中的onCreateViewHolder创建),如果每次使用子View都要去重新创建,肯定会影响滑动的流畅性,所以RecyclerView通过Recycler来缓存的是ViewHolder(内部包含子View),这样在滑动时可以复用子View,某些条件下还可以复用子View绑定的数据。所以本质上来说,RecyclerView之所以能够实现顺畅的滑动效果,是因为缓存机制,因为缓存减少了重复绘制View和绑定数据的时间,从而提高了滑动时的性能。

一、缓存

1.1、四级缓存

Recycler缓存ViewHolder对象有4个等级,优先级从高到底依次为:

  • mAttachedScrap:缓存屏幕中可见范围的ViewHolder;
  • mCachedViews:缓存滑动时即将与RecyclerView分离的ViewHolder,默认最大2个;
  • ViewCacheExtension:自定义实现的缓存;
  • RecycledViewPool :ViewHolder缓存池,可以支持不同的ViewType;

1.1.1 mAttachedScrap

mAttachedScrap存储的是当前屏幕中的

以上是关于深入理解Android RecyclerView的缓存机制的主要内容,如果未能解决你的问题,请参考以下文章

深入理解 RecyclerView 的绘制流程和滑动原理

Android开发之漫漫长途 XIV——RecyclerView

一篇博客理解Recyclerview的使用

Android开发之漫漫长途 XVI——ListView与RecyclerView项目实战

深入浅出 RecyclerView

Android RecyclerView工作原理分析(下)