Recycler
有4个层次用于缓存ViewHolder
对象,优先级从高到底依次为ArrayList<ViewHolder> mAttachedScrap
、ArrayList<ViewHolder> mCachedViews
、ViewCacheExtension mViewCacheExtension
、RecycledViewPool mRecyclerPool
。如果四层缓存都未命中,则重新创建并绑定ViewHolder
对象
缓存性能:
缓存 | 重新创建ViewHolder
|
重新绑定数据 |
---|---|---|
mAttachedScrap | false | false |
mCachedViews | false | false |
mRecyclerPool | false | true |
缓存容量:
缓存用途:
mAttachedScrap
:用于布局过程中屏幕可见表项的回收和复用。mCachedViews
:用于移出屏幕表项的回收和复用,且只能用于指定位置的表项,有点像“回收池预备队列”,即总是先回收到mCachedViews
,当它放不下的时候,按照先进先出原则将最先进入的ViewHolder
存入回收池。mRecyclerPool
:用于移出屏幕表项的回收和复用,且只能用于指定viewType
的表项缓存结构:
mAttachedScrap
:ArrayList<ViewHolder>
mCachedViews
:ArrayList<ViewHolder>
mRecyclerPool
:对ViewHolder
按viewType
分类存储在SparseArray<ScrapData>
中,同类ViewHolder
存储在ScrapData
中的ArrayList
中