android recyclerView緩存數量 recycleview的缓存

RecycleView的缓存机制
1、四大缓存级别,屏幕内缓存、屏幕外缓存、自定义缓存、缓存池。并由内部类Recycle来管理。
1.1.1、一级缓存:屏幕内缓存(mAttachchedScrap)
顾名思义,只缓存在屏幕中显示的holder,缓存位置在mAttachedScrap和mChangedScrap中

mAttachedScrap 未与RecyclerView分离的ViewHolder列表
mChangedScrap 表示数据已经改变的ViewHolder列表,需要重新绑定数据(调用 onBindViewHolder)
1.1.2、二级缓存:屏幕外缓存(mCachedViews)
缓存移出屏幕外的holder,缓存数量可通过setViewCacheSize(int)设置,默认缓存数为2。如果缓存已满,则旧的holder 会被移入缓存池,RecycledViewPool中

1.2.3、三级缓存:自定义缓存(ViewCacheExtension)
开发者自己管理缓存,可通过Recyclerview.setViewCacheExtension()设置。

1.2.4、四级缓存:缓存池(RecycledViewPool)
当缓存池的容量满了时,将不再缓存,并且从缓存池中读取的holder需要重新绑定。储存二维数组:SparseArray; key为int类型的viewType,值为ScrapData对象; ScrapData里面有ArrayList,这个list数量默认最大5个;

2、在数据加载,滑动过程中,各数据的缓存变化
数据的加载过程是从1级缓存-2级缓存-4级缓存的顺序加载。

2.1、第一次加载显示
第一次加载,1、2、4级缓存均无数据,所以会创建适配器,并从中绑定数据,再根据界面需显示的数据项,并将其viewholder设置到一级缓存中。

2.2、数据上下滑动,会有两种情况,移除和添加,即回收和复用
2.2.1、移除
1.上下滑动,顶部和底部的Item会移除,这时候移除不可见的item,会被将其position和viewHolder放入二级缓存,不清空View里的数据。
2.根据二级缓存数(不做设置,默认2),如果小于缓存数,直接放入二级缓存,否则,将二级缓存中最先放入的item,移出放入四级缓存,再将其放入二级缓存。

2.2.1、添加
1.上下滑动,底部和顶部的Item会添加,这时会先根据viewHolder的position,从二级缓存中查找,存在,直接使用,不用重新绑定数据,直接将ViewHolder放入一级缓存。
2.如果二级缓存无法找到匹配的viewHolder,则直接根据viewType去四级缓存中查找,查找到之后,重新绑定数据,并将其添加到一级缓存。
-----------------------------------
android recyclerView緩存數量 recycleview的缓存
https://blog.51cto.com/u_16099169/10400745

相关推荐

  1. android recyclerView recycleview缓存

    2024-06-07 23:48:01       24 阅读
  2. 、分布式缓缓存风险

    2024-06-07 23:48:01       36 阅读
  3. 计算机中缓存与内

    2024-06-07 23:48:01       52 阅读
  4. 缓冲和缓区别

    2024-06-07 23:48:01       58 阅读
  5. 浏览器缓存(强缓、协商缓存

    2024-06-07 23:48:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 23:48:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 23:48:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 23:48:01       82 阅读
  4. Python语言-面向对象

    2024-06-07 23:48:01       91 阅读

热门阅读

  1. Spark大数据 IDEA开发词频统计项目

    2024-06-07 23:48:01       31 阅读
  2. zdppy_api如何实现带参数的中间件

    2024-06-07 23:48:01       25 阅读
  3. Servlet

    Servlet

    2024-06-07 23:48:01      21 阅读
  4. 接口框架项目实战-pytest(六)csv数据驱动

    2024-06-07 23:48:01       27 阅读
  5. Python爬虫实战:理论基础与源码

    2024-06-07 23:48:01       26 阅读
  6. Django 里解决自定义中间件的问题

    2024-06-07 23:48:01       28 阅读
  7. less中文乱码问题

    2024-06-07 23:48:01       27 阅读