RecyclerView緩存的是ViewHolder褥琐,即每個(gè)ItemView
ItemView的加載
因?yàn)槊總€(gè)ItemView由xml加載成為View (onCreateViewHolder方法) ,是一個(gè)深度遍歷的過(guò)程狂打,并且是通過(guò)反射來(lái)獲取的每個(gè)View书斜,這其實(shí)是一個(gè)耗時(shí)的操作诬辈。如果每個(gè)子ItemView都通過(guò)這種方法去加載,是非常不合適滴菩佑。所以需要緩存自晰。四級(jí)緩存
界面上的View緩存 :mAttachedScrap
剛剛移出屏幕的緩存: mCachedViews
自定義緩存:mViewCacheExtension
緩存池:mRecyclerPool
mAttachedScrap在屏幕中的緩存凝化,用于數(shù)據(jù)刷新時(shí)稍坯,不需要重新加載子ItemView,直接復(fù)用;
mCachedViews剛剛移出屏幕的緩存瞧哟,最大容量為2混巧,通過(guò)position來(lái)保存,數(shù)據(jù)不變勤揩,直接復(fù)用咧党;滑動(dòng)時(shí),該緩存一邊add陨亡,一邊remove傍衡。
mViewCacheExtension自定義緩存,基本用不上
-
mRecyclerPoor保存第二級(jí)緩存中保存不了的ItemView负蠕。通過(guò)itemType來(lái)保存蛙埂,每種itemType可以保存5個(gè)ItemView。具體緩存結(jié)構(gòu)如下圖: