一级缓存mAttachedScrap和mChangedScrap,缓存屏幕内可见viewHolder;二级缓存mCachedViews,缓存即将离屏的viewHolder(默认大小为2);三级缓存mViewCacheExtension,开发者实现;四级缓存mRecyclerPool,默认最多缓存同一viewType的5个离屏 viewHolder。
RecyclerView调用onLayout()会执行Recycler.scrapView()进行mAttachedScrap和mChangedScrap缓存;RecyclerView调用onTouchEvent()会执行recycleViewHolderInternal()进行mCachedViews缓存,如果此前mCachedViews集合大小等于mViewCacheMax(默认为2),则会调用RecyclerView.putRecycledView()进行mRecyclerPool缓存。
当RecyclerView.LayoutManager调用onLayoutChildren()会执行RecyclerView.tryGetViewHolderForPositionByDeadline()进行复用viewHolder。