RecyclerView缓存的是ViewHolder,即每个ItemView
-
ItemView的加载
因为每个ItemView由xml加载成为View (onCreateViewHolder方法) ,是一个深度遍历的过程,并且是通过反射来获取的每个View,这其实是一个耗时的操作。如果每个子ItemView都通过这种方法去加载,是非常不合适滴。所以需要缓存。 -
四级缓存
界面上的View缓存 :mAttachedScrap
刚刚移出屏幕的缓存: mCachedViews
自定义缓存:mViewCacheExtension
缓存池:mRecyclerPool
-
mAttachedScrap在屏幕中的缓存,用于数据刷新时,不需要重新加载子ItemView,直接复用;
-
mCachedViews刚刚移出屏幕的缓存,最大容量为2,通过position来保存,数据不变,直接复用;滑动时,该缓存一边add,一边remove。
-
mViewCacheExtension自定义缓存,基本用不上
-
mRecyclerPoor保存第二级缓存中保存不了的ItemView。通过itemType来保存,每种itemType可以保存5个ItemView。具体缓存结构如下图:
RecycledViewPool.png
网友评论