缓存机制 , 回收复用 ,
1. 从滑动事件看 onTouchEvent MotionEvent.Action_MOVE --> scrollByInteral 垂直滑动 进入
consumedY = mLayout.scrollVerticallyBy(y, mRecycler, mState);
LinearLayoutManager --》scrollVerticallyBy --》 scrollBy --》
fill(recycler, mLayoutState, state, false); (fill 里面主要两个任务 1.回收 recycleByLayoutState(recycler, layoutState); 2 复用 layoutChunk(recycler, state, layoutState, layoutChunkResult); )。
1.回收 --》recycleViewsFromStart --> recycleChildren --> removeAndRecycleViewAt -->
recycler.recycleViewHolderInternal(viewHolder) (最重要的回收方法 )
--> recycleCachedViewAt(0)
2 复用:
layoutChunk --》 layoutState.next(recycler) --》 recycler.getViewForPosition (终极方法) --》tryGetViewHolderForPositionByDeadline
四级缓存 1.根据 mChangeScrap id 和position holder==null -> getScrapOrHiddenOrCachedHolderForPosition
mAttachedScrap -->
2. mCachedViews -------大小为 2 先进先出
3. 自定义 mViewCacheExtension
4 pool 缓存池 getRecycledViewPool().getRecycledView(type) 默认大小为 5 先进后出 type一样 缓存的Viewholder都一样 每个type缓存 5个。