[关闭]
@946898963 2021-03-03T08:21:49.000000Z 字数 2099 阅读 597

RecyclerView的缓存

Android控件和框架


RecyclerView源码分析(一)--整体设计


聊一聊RecyclerView的缓存机制

当RecyclerView滚动时它干了什么

详解RecyclerView动画原理之一

老大爷都能看懂的RecyclerView动画原理之二


RecyclerView缓存原理,有图有真相


真正带你搞懂 RecyclerView 的缓存机制,再也不怕面试被虐了


让你彻底掌握RecyclerView的缓存机制这篇文章讲解的很好,感觉有头绪的了,继续看其他的,记得看这篇文章的评论,能解决某些疑惑。


下面这篇文章也不错,接着上篇文章看
Android源码分析之RecyclerView源码分析(二)—缓存机制(从第一级获取的时候,根据id获取这个地方没看明白)
RecyclerView机制分析: Recycler
Android源码分析之RecyclerView源码分析(一)—绘制流程


RecyclerView回收机制分析通过代码详细分析了滚动的时候,ViewHolder的缓存和获取逻辑,暂时只看对代码分析得出的结论就好


RecyclerView缓存机制


RecyclerView 缓存机制 | 如何复用表项?

RecyclerView 缓存机制 | 回收些什么?(还有一系列的文章,但是还没看)


强烈推荐:RecyclerView 的缓存复用机制(感觉还可以再看看)


RecyclerView缓存机制(有一系列的文章,还没看)

关于Recyclerview的缓存机制的理解

Android-RecyclerView布局显示和回收复用流程

RecyclerView剖析

强烈推荐:RecyclerView 的缓存复用机制

Android深入理解RecyclerView的缓存机制

基于场景解析RecyclerView的回收复用机制原理

【腾讯Bugly干货分享】Android ListView 与 RecyclerView 对比浅析—缓存机制

RecyclerView 必知必会

结合源码分析RecyclerView复用机制: Recycler

每日一问 | RecyclerView的多级缓存机制,每级缓存到底起到什么样的作用?

RecyclerView的缓存机制和内存优化

RecyclerView 缓存机制详解

Android-RecyclerView的缓存机制

RecyclerView缓存分析


RecyclerView 预加载机制源码分析

RecyclerView的新机制:预取(Prefetch)

RecyclerView 性能优化

RecyclerView Prefetch功能探究


使用 RecyclerView 的难度可大可小,若仅展示单类型列表,只要优化视图绘制性能、降低布局复杂度,就能保证性能。

若列表分类多、样式差异大,类似微信聊天消息界面,遇到问题的难度将大幅增加。需要在预加载、复用上做进一步调优,单纯实现 onCreateViewHolder() 和 onBindViewHolder() 并不能满足需求。总的来说,要以追求视图出现在屏幕前耗费最少时间为目标。

例如:下图样式的 ViewHolder 仅缓存5个,多余视图移出屏幕后会销毁。下次需要该 ViewHolder 又要重新构建,所以提高缓存数量可减少这种情况发生次数。

此处输入图片的描述

RecyclerViewPool缓存可以针对多ItemType,设置缓存大小。默认每个ItemType的缓存个数是5。而且该缓存可以给多个RecyclerView共享。由于默认缓存个数为5,假设某个新闻App,每屏幕可以展示10条新闻(是第一屏有10个新闻,第二篇有10个视频,以此类推。),那么必然会导致缓存命中失败,频繁导致创建ViewHolder影响性能。所以需要扩大缓存size。

数据更新时的缓存过程
这块我就简单说一下结论,感兴趣的同学可以自行查看源码。为什么我们在有数据刷新的时候推荐大家使用notifyItemChanged等方法而不使用notifyDataSetChanged方法呢?

在调用notifyDataSetChanged方法后,所有的子view会被标记,这个标记导致它们最后都被缓存到RecyclerPool中,然后重新绑定数据。并且由于RecyclerPool有容量限制,如果不够最后就要重新创建新的视图了。
但是使用notifyItemChanged等方法会将视图缓存到mChangedScrap和mAttachedScrap中,这两个缓存是没有容量限制的,所以基本不会重新创建新的视图,只是mChangedScrap中的视图需要重新绑定一下。

问题:

RecyclerView滑动抖动?

RecyclerView预加载

RecyclerView为Item设置Id

相关问题的参考链接:

为什么 Android 在初始化的时候会 measure 和 layout 两次,但最后draw一次?

View的三次measure,两次layout和一次draw

View为什么会至少进行2次onMeasure、onLayout

Android高频面试专题 - 提升篇(二)View绘制流程

RecyclerView 性能优化一 Prefetch(预取)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注