RecyclerView深入研究

本文深入探讨了RecyclerView的性能优化,包括预取功能、四级缓存机制、降低item布局层次、复用Pool缓存、保存嵌套RecyclerView的滑动状态等关键点。通过理解并合理应用这些优化策略,可以显著提升RecyclerView在Android应用中的滑动流畅性和内存效率。
摘要由CSDN通过智能技术生成

预取功能(Prefetch)

这个功能是rv在版本25之后自带的,也就是说只要你使用了25或者之后版本的rv,那么就自带该功能,并且默认就是处理开启的状态,通过LinearLayoutManager的setInitialItemPrefetchCount()我们可以手动控制该功能的开启关闭,但是一般情况下没必要也不推荐关闭该功能。
在这里插入图片描述
我们都知道android是通过每16ms刷新一次页面来保证ui的流畅程度,现在android系统中刷新ui会通过cpu产生数据,然后交给gpu渲染的形式来完成,从上图可以看出当cpu完成数据处理交给gpu后就一直处于空闲状态,需要等待下一帧才会进行数据处理。

而这空闲时间就被白白浪费了,如何才能压榨cpu的性能,让它一直处于忙碌状态,这就是rv的预取功能(Prefetch)要做的事情,rv会预取接下来可能要显示的item,在下一帧到来之前提前处理完数据,然后将得到的itemholder缓存起来,等到真正要使用的时候直接从缓存取出来即可。


四级缓存

rv设计中另一个提高滑动流畅性的东西就是这个四级缓存了,如果说预取是25版本外来的务工人员,那么这个四级缓存就是一个本地土著了,自rv出现以来就一直存在,相比较listview的2级缓存机制,rv的四级看起来是不是显得更加的高大上。借用一张示意图来看下rv的四级缓存:
在这里插入图片描述
可以先来看下recycler中关于这四级缓存的代码部分:

public final class Recycler {
   
        final ArrayList<ViewHolder> mAttachedScrap = new ArrayList<>();
        ArrayList<ViewHolder> mChangedScrap = null;

        final ArrayList<ViewHolder
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值