RecyclerView缓存机制浅析

RecyclerView缓存机制浅析

​ RecyclerView在Android的应用上可以说已经取代了listview,其灵活,组装式设置,多缓存机制可以适应多列表在Android开发中各种各样的需求。

​ 对于RecyclerView的缓存机制一直都想稍微的屡下思路,简单点说RecyclerView对比listview缓存机制中就是多了两层缓存的支持,listview是两级缓存,RecyclerView为四级缓存(当然在大部分情况下是三级缓存)。

RecyclerView缓存类简介

缓存类简介
Recycler这是一个比较重要的类,此类中缓存屏幕内ViewHolder以及部分屏幕外ViewHolder,主要缓存容器为mAttachedScrap以及mChangedScrap(此容器是viewholder被标记数据已过时时,需要更新的viewholder将放置于此,也就说这个viewholder数据源已经改变)。对于屏幕外ViewHolder由mCachedViews缓存,默认情况下缓存两个。
ViewCacheExtension此类为自定义缓存类,为四级缓存中的一级,因为对此了解不太多就不做太多解释,但大部分情况下这一级缓存是没有的,当开发者没有设置自定义缓存时
RecycledViewPool这个类同样是用来缓存ViewHolder的,用于缓存离屏的ViewHolder,在mCachedViews超过缓存数量后会淘汰ViewHolder进入RecycledViewPool,同时RecycledViewPool支持多RecyclerView共享,都存在相同类型的ViewHolder可以复用,这也是性能优化的一点可以关注下。

RecyclerView缓存流程

在这里插入图片描述

对于分级可能和一些人不太一样,这里是根据进入的方法不同而分的,不必太纠结于此。在这里ViewCacheExtension如果开发者没有setViewCacheExtension的情况下是为null的,也就是说这一级缓存在默认情况下是没有的。

总结来说RecyclerView的缓存主要依赖于Recycler中的mChangedScrap、mAttachedScrap(缓存屏幕内viewholder)、mCachedViews(缓存两个屏幕外的viewholder)。RecycledViewPool(缓存屏幕外的viewholder),自定义缓存作为扩展并不一定是主要依赖的缓存类。

ok,大概的理了下缓存流程,源码就不带大家一一去看了,毕竟RecyclerView的源码又香(chou)又长的,有兴趣的童鞋可以点进去走一下流程。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值