再学RecyclerView的回收复用机制

本文探讨了RecyclerView的回收复用机制,详细解析了四级缓存的工作原理,包括回收过程中的两个主要入口,以及复用过程中的fill()方法。在滑动和数据更新场景下,该机制如何优化性能,避免不必要的创建和绑定数据。同时,针对遇到的布局复用问题,提出了解决方案。

1. 背景

之前对RecyclerView的回收机制掌握状态,一直是朦朦胧胧的,知道有四级缓存,也知道四级缓存分别是干嘛的,也知道先从哪取再从哪取,但是,再细一点,就不知道原因了,说白了还是没有学明白,于是又花了时间细心钻研了下

2. 新的收获

之前有几个误区,包括这次也有新的理解,直到这次看完才明白,记录一下

  • 四级缓存并不是都用得上,比如滑动的时候就用不到scrap缓存,实际滑动的时候,一般只用到了两级缓存
  • mChangedScrapmAttachedScrap共同点与不同点
    共同点是:不参与滑动时的回收复用,只保存重新布局时从RecyclerView分离的ViewHolder,筛选条件都有position或者id
    不同点是:mChangedScrap保存的是:无效、未移除、数据发生变化的ViewHolder,而mAttachedScrap保存的是:无效、未移除、数据没有发生变化的ViewHolder
  • mCachedViews默认容量是2,筛选条件为position或者id
  • 缓存池默认大小是“两个5”,即五种itemType,每种itemType默认有五个。使用了SparseArray这个数据类型,如下
public static class RecycledViewPool {
   
   
     private static final int
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值