关于recyclerviewPool滑动复用的探究

关于recyclerviewPool滑动复用的探究

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

首先试验的条件
1.item 200
2.targetSdkVersion 30
3.‘androidx.recyclerview:recyclerview:1.0.0’
4.不同种的type4个
5.然后在recyclerview 的这个方法上打上断点。
在这里插入图片描述
然后在debug的控制台写上需要debug的内容。
在这里插入图片描述
我这里写了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又重新调用的现象,所以探究了这个现象。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页