RecycleView

緩存機制 , 回收複用   ,

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個。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章