RecyclerView和ListView區(qū)別

緩存機(jī)制

ListView的RecycleBin機(jī)制

首先,你將會有一個view數(shù)組mActiveViews,還有一個ArrayList<View>的mScrapView,這兩個的作用有什么用呢。列表展示數(shù)據(jù)的時候,假設(shè)有十條數(shù)據(jù)在屏幕上面,其他數(shù)據(jù)都在屏幕外面(也就是用戶看不到的地方)。那么屏幕正在使用的這十條數(shù)據(jù)就會存儲在mActiveViews中,里面的View只能被獲取一次,如果移出屏幕后被廢棄的view就會到mScrapView(這個時候已經(jīng)沒有pos信息和數(shù)據(jù)信息了)。當(dāng)getview方法調(diào)用時,如果convertView不為空,就可以直接重用,從廢棄的view中獲得,但是要重新bindview。
這里引用Android ListView 與 RecyclerView 對比淺析—緩存機(jī)制的圖片來說明listview的獲取緩存過程

ListView獲取緩存過程

RecyclerView的緩存機(jī)制

RecyclerView有四級緩存,分別是mAttachedScrap(屏幕內(nèi)緩存),mCacheViews(屏幕外的緩存),mViewCacheExtensions(自定義緩存),mRecycledViewPool(緩存池)。
緩存過程就是當(dāng)我滑動屏幕時候,最近被移出屏幕外的viewholder就會放到mCacheViews上面,這個時候是含有pos信息和數(shù)據(jù)信息的,如果他滿了且沒有實現(xiàn)自定義緩存,就會把老的viewholder放到緩存池中,這個時候緩存池里面的是沒有數(shù)據(jù)信息的,如果你要復(fù)用的話就要重新bindview。
如果我要獲取緩存的話,就按順序來讀取,先去判斷mAttachedScrap有沒有,有的話直接拿來用,然后判斷mCacheViews,接著判斷自定義緩存。如果都沒有再去緩存池里判斷,沒有的話就createViewHolder,有的話就bindViewHolder。


RecyclerView獲取緩存過程

布局

  • ListView只能豎著布局
  • RecyclerView可以提供線性布局,網(wǎng)格布局,瀑布流布局,也可以選擇豎著還是橫著

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容