RecyclerView缓存机制分析--GridlayoutManager中的坑

本文深入分析RecyclerView的缓存机制,特别是针对GridLayoutManager时出现的卡顿问题。讨论了mCachedViews和RecyclerPool的工作原理,预加载时机,以及初次创建item的数量。文中揭示了GridLayoutManager在多列时导致的频繁创建item问题,并提出了优化建议,如调整mCachedView大小,预加载策略以及利用item的稳定ID来提高缓存命中率。
摘要由CSDN通过智能技术生成

前言

主要是接上一篇文章,想跟进下RecyclerView的源码,视图从源码层面找到解决RecyclerView+GridLayoutManager组合导致的滑动卡顿问题。
RecycleView在滑动的过程中,需要不断的创建、绑定item、绘制item,这里就不得不了解下recycleView的缓存机制。

缓存机制

其实关于recycleView的缓存机制,网上有很多相关文章:下面推荐几篇我自己看的
RecyclerView 体验优化及入坑总结
【进阶】RecyclerView源码解析(二)——缓存机制
RecyclerView回收和复用机制分析
这里就不做多赘述了。

下面就说一下自己所get到的一些点:
首先要了解recycleView的基本缓存机制:比如是在RecyclerView.Recycler中实现缓存,知道几层缓存对应的数组;
缓存的单位是ViewHolder;tryGetViewHolderForPositionByDeadline()方法是缓存逻辑的入口,recycleViewHolderInternal()是用来更新缓存的;

其次就可以在这次方法打上断点,观察RecycleView.Recycler中的mCachedViews和mScrop两个数组中的元素变化,观察方法的调用顺序等;
For Example:
在这里插入图片描述
最后你就已经对recycleView的缓存过程有了很深的了解了,能够知道什么时候使用缓存,什么时候需要创建,是否需要预创建等等。了解了之后,你就会知道其实google工程师写代码时的想法、逻辑等跟我们平时写代码区别真的不大。

下面说下我所理解到几点:
1、mCachedViews和RecyclerPool
mCachedViews是使用position进行匹配的
在这里插入图片描述
如果RecyclerView.this.mAdapter.hasStableIds()为true,也可以根据item的id、type进行匹配
在这里插入图片描述

mRecyclePool是根据itemType进行匹配的

       @Nullable
        public RecyclerView.ViewHolder getRecycledView(int viewType) {
        	//根据viewType获取相对应的ArrayList,如果该list不为空,则返回一个ViewHolder.
            RecyclerView.RecycledViewPool.ScrapData scrapData = (RecyclerView.RecycledViewPool.ScrapData)this.mScrap.get(viewType);
            if (scrapData != null && !scrapData.mScrapHeap.isEmpty()) {
                ArrayList<RecyclerView.ViewHolder> scrapHeap = scrapData.mScrapHeap;
                return (RecyclerView.ViewHolder)scrapHeap.remove(scrapHeap.size() - 1);
            } else {
                return null;
            }
        }

每个itemType对应只能缓存5个ViewHolder.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值