緩存機制 , 回收複用 ,
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個。