RecyclerView在设计的时候有5个缓存对象,共分了三级.每次创建ViewHolder的时候,会按照优先级一次查询环迅创建ViewHolder.每次将Viewholder缓存到Recycler缓存的时候,也会按照优先级一次缓存进去
-
一级缓存:返回布局和内容都有效的ViewHolder
- 按照position或者id进行匹配
- 命中一级缓存无需onCreateViewHolder和onBindViewHolder
- mAttachScrap在adapter.notifyXxx的时候用到
- mChanedScarp在每次View绘制的时候用到,因为getViewHolderForPosition非调用多次
- mCachedView:用来解决滑动抖动的情况,默认值为2
-
二级缓存:返回View
- 按照position和type进行匹配
- 直接返回View
- 需要自己继承ViewCacheExtension实现
- 位置固定,内容不发生改变的情况,比如说Header如果内容固定,就可以使用
-
三级缓存:返回布局有效,内容无效的ViewHolder
- 按照type进行匹配,每个type缓存值默认=5
- layout是有效的,但是内容是无效的
- 多个RecycleView可共享,可用于多个RecyclerView的优化