Android RecyclerView实现原理详解

RecyclerView 的缓存机制

Recycler有4个层次用于缓存ViewHolder对象,优先级从高到底依次为ArrayList<ViewHolder> mAttachedScrapArrayList<ViewHolder> mCachedViewsViewCacheExtension mViewCacheExtensionRecycledViewPool mRecyclerPool。如果四层缓存都未命中,则重新创建并绑定ViewHolder对象

缓存性能:

缓存 重新创建ViewHolder 重新绑定数据
mAttachedScrap false false
mCachedViews false false
mRecyclerPool false true

缓存容量:

缓存用途:

  • mAttachedScrap:用于布局过程中屏幕可见表项的回收和复用。
  • mCachedViews:用于移出屏幕表项的回收和复用,且只能用于指定位置的表项,有点像“回收池预备队列”,即总是先回收到mCachedViews,当它放不下的时候,按照先进先出原则将最先进入的ViewHolder存入回收池。
  • mRecyclerPool:用于移出屏幕表项的回收和复用,且只能用于指定viewType的表项
  1. 缓存结构:

    • mAttachedScrapArrayList<ViewHolder>
    • mCachedViewsArrayList<ViewHolder>
    • mRecyclerPool:对ViewHolderviewType分类存储在SparseArray<ScrapData>中,同类ViewHolder存储在ScrapData中的ArrayList

https://juejin.cn/post/6844903780006264845

教程来源于Github,感谢zhpanvip大佬的无私奉献,致敬!

技术教程推荐

Android开发高手课 -〔张绍文〕

许式伟的架构课 -〔许式伟〕

Vim 实用技巧必知必会 -〔吴咏炜〕

Redis核心技术与实战 -〔蒋德钧〕

WebAssembly入门课 -〔于航〕

技术面试官识人手册 -〔熊燚(四火)〕

数据分析思维课 -〔郭炜〕

全链路压测实战30讲 -〔高楼〕

JavaScript进阶实战课 -〔石川〕