前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RecyclerView四级缓存初探

RecyclerView四级缓存初探

原创
作者头像
李林LiLin
发布2023-03-10 20:55:06
1.5K0
发布2023-03-10 20:55:06
举报
文章被收录于专栏:Android进阶编程

1、RecyclerView的缓存类

RecycleView的四级缓存是由三个类共同作用完成的,Recycler、RecycledViewPool和ViewCacheExtension。

2、Recycler

用于管理已经废弃或者与RecyclerView分离的ViewHolder,这里面有两个重要的成员:

  • 屏幕内缓存:(一级缓存)
    • 屏幕内缓存指:在屏幕中显示的ViewHolder,这些ViewHolder会缓存在mAttachedScrap、mChangedScrap中。
    • mChangedScrap 表示数据已经改变的viewHolder列表,mAttachedScrap表示未与RecyclerView分离的(数据没改变过的)ViewHolder列表。
  • 屏幕外缓存:(二级缓存)
    • 当列表滑动出了屏幕时,ViewHolder会被缓存在 mCachedViews。
    • mCachedViews大小由mViewCacheMax决定,默认DEFAULT_CACHE_SIZE为2,可通过Recyclerview.setItemViewCacheSize()动态设置。
    • mCachedViews中的ViewHolder没有进行清理,ViewHolder相关的position,flag等标志都一并被缓存了,从mCachedViews中取出的ViewHolder不需要再进行绑定操作而可以直接使用

3、ViewCacheExtension (三级缓存)

开发者可自定义的一层缓存,是虚拟类ViewCacheExtension的一个实例,开发者可实现方法getViewForPositionAndType(Recycler recycler, int position, int type)来实现自己的缓存。

4、RecycledViewPool(四级缓存)

  • RecycledViewPool类是用来缓存ViewHolder,如果多个RecyclerView之间用setRecycledViewPool(RecycledViewPool)设置同一个RecycledViewPool,他们就可以共享ViewHolder。
  • pool的大小默认为5
  • 不同viewType的viewHolder存在不同的list中。
  • 从pool池中拿出来的viewholder是剥了层皮的(清除所有的position,flag等),需要重新绑定一次数据

5、总结

四级缓存的流程是:屏幕内 -> 屏幕外 -> 用户自定义 -> pool池。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、RecyclerView的缓存类
  • 2、Recycler
  • 3、ViewCacheExtension (三级缓存)
  • 4、RecycledViewPool(四级缓存)
  • 5、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档