关于recyclerviewPool滑动复用的探究

关于recyclerviewPool滑动复用的探究

在滑动的情况下,pool 中缓存的每种类型的item最少拥有一个。

首先试验的条件
1.item 200
2.targetSdkVersion 30
3.‘androidx.recyclerview:recyclerview:1.0.0’
4.不同种的type4个
5.然后在recyclerview 的这个方法上打上断点。
在这里插入图片描述
然后在debug的控制台写上需要debug的内容。(为什么debug中的内容要这么写,参考recyclerview类中的getrecyclerview 方法,而getrecyclerview方法则是在tryGetViewHolderForPositionByDeadline中被调用。)
在这里插入图片描述
我这里写了5种type,其中mscrap.get(index),其中的index就是type的类型,我这里是2的倍数都是head,type为1的是普通条目。

然后在recyclerview 刚开始滑动的时候,pool中是没有任何holder的,所以执行的都是oncreateview方法先创建holder,然后再滚动的时候先放到ViewCache中,通过setViewCacheSize方法可以知道,最大缓存item的数量是2,所以当recyclerview列表向下移动的时候,head1~4统统都被放到了cacheview中,然后放到了pool中,pool中每一种holder缓存的数量是最大缓存数量是5个,接着再向下移动的过程中,head1 ~4 逐渐被移除了屏幕,存到了pool 中,这一点可以打断点自己试验。然后在接着滑动cacheview中全部都变成了普通的holder。然后现在滑动完所有数据之后,再向上滑动的时候,接近滑动到最顶端的时候,这时候cacheview会有些改变,因为接近顶部的时候是head1 ~head4,cacheview只有普通的holder,这时候去pool中找,找到了最下面的head4,然后将head4 从pool中返回出去,并且head4的holder在pool中移除,head1 ~head3 同理。直到移动到最顶端之后,pool中所有的缓存都没了。第二次从上往下移动,pool没有缓存的holder了,所以会重新去调用oncreatview方法。

以上是对于recyclerview 中多type在滑动时候对于pool中的影响,但是如果只是单type,在相同实验条件下,oncreateview方法只会调用一个屏幕item数量的次数,无论以后反复上下拉多少回。因在多种类型的type下无意发现下拉到底再上拉到顶在下拉会导致 oncrateview又重新调用的现象,所以探究了这个现象。

补充:
如果是单holder的时候,onCreateViewHolder 方法创建的次数是一个屏幕加上pool 中缓存的次数。举个例子,比如单个item都是textview,单个屏幕比如能够展示27个item,然后加上pool中的5个,总共是32个,那么这32在第一次初始化之后,再上下滑动都不会再次调用oncreateviewholder 方法。 (但是在多条目的时候(比如说有5个head),在初始化了所有oncreateView的次数之后,下滑到底之后再次上滑到顶,然后第二次从顶开始下滑的时候,oncreateview 会再次被调用。如果重复上面的动作,第三次也会,第四次也会。。。,为什么下滑->上滑->下滑,第二次的下滑还会调用oncreateview方法?因为在上滑的过程中,把pool中的holder都返回了出去,pool从下滑到顶的时候已经空了,所以第一次之后的每次重新下滑,都会调用oncreateview方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值