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大佬的无私奉献,致敬!

技术教程推荐

程序员进阶攻略 -〔胡峰〕

Vue开发实战 -〔唐金州〕

Kafka核心技术与实战 -〔胡夕〕

.NET Core开发实战 -〔肖伟宇〕

软件设计之美 -〔郑晔〕

技术管理案例课 -〔许健〕

HarmonyOS快速入门与实战 -〔QCon+案例研习社〕

现代React Web开发实战 -〔宋一玮〕

结构会议力 -〔李忠秋〕