深入分析RecyclerView源码——缓存策略

计算机领域常用的提高效率办法是使用缓存,一级不够就上多级缓存,RecyclerView也采用了缓存策略。缓存的单位是ViewHolder,具体实现是Recycler类,Recycler有五个缓存池用来存放暂时用不到的ViewHolder,下一次使用时会在缓存池中寻找,找不到时才会调用Adapter的onCreateViewHolder创建ViewHolder。加上ChildHelper的mHiddenViews共六个缓存池如下:

mChangedScrap 在预布局阶段,如果ViewHolder数据有变化,会被LayoutManager的onLayoutChildren方法中的detachAndScrapAttachedViews存入mChangedScrap
mAttachedScrap 在预布局阶段,如果ViewHolder数据没有变化,会被存入mAttachedScrap,在布局阶段也会被存入,方法和mChangedScarp是同一个
mCachedViews ViewHolder不需要了,例如被滑出屏幕,会被回收到mCachedViews,mCachedViews大小有限制,空间满了,会按照最近最少使用原则移动一个到mRecyclerPool
mViewCacheExtension 自定义的缓存池,一般用不到
mRecyclerPool 当mCachedViews存不下时会移动旧的viewHolder到这里来,和上面所有缓存池最大的区别是mRecyclerPool中的viewHolder是没有数据的,必须调用Adapter的onBindViewHolder重新绑定
mUnmodifiableAttachedScrap mAttachedScrap的不可修改版本,用于处理被挤出屏幕的view的动画,在布局流程下中有分析
mHiddenViews 和上面的都不同,mHiddenViews是Chi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值