地狱难度!字节跳动Android高级岗:说说RecyclerView的回收复用机制

大概流程如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

复用:滑动过程中出现了新的itemView,不用每次都去new,而是优先从缓存中去拿,缓存不能满足需求,再去 执行onCreateViewHolder创建新的itemView并封装到viewHolder中

大概流程如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果追踪一遍上面的源码,那么就可以回答之前的问题

回收的是什么?复用的又是什么?
回收到哪里去了?复用又是从哪里拿?

答:回收和复用的都是ViewHolder对象,在RecyclerView的内部类Recycler中,可以看到四重缓存中的关键数据结构都和ArrayList<ViewHolder>有关,ViewHolderitemView的封装。
说明无论回收还是复用,都是以ViewHolder为单位去存取。

什么时候回收?什么时候复用?

答:我们追踪程序,是以 RecyclerViewonTouchEvnet move事件为起点。结合追踪到的源码,可以发现,回收发生在 itemView消失的时候,复用则发生在 itemView由不可见到可见的时候

其他重要结论

RecyclerView本身只是一个容器(RecyclerView extends ViewGroup), 它的onLayout方法重写,决定了itemView的排布方式,追踪进去,onLayout >dispatchLayout()> dispatchLayoutStep1() dispatchLayoutStep2() dispatchLayoutStep3(); 看来layout过程分为三步,而进入这3个方法,都能找到 mLayout.XXX方法,这是因为 RecyclerView本身只是一个ViewGroup,它的布局方式,全权委托给了LayoutManager这个内部类的实现,而这个实现的关键方法则是:onLayoutChildren,重写这个方法将会决定RecyclerViewitemView如何布局

看过了源码,在去理解之前写的一些RecyclerViewAdapter,认识深刻了很多,为什么它有这么几个方法 onCreateViewHolder,onBindViewHolder, 为什么Adapter的类定义时要这样 Adapter<VH extends ViewHolder>. 因为AdapterRecyclerView的数据和itemView的连接层,itemView都是要封装到ViewHolder中的,绑定数据就要和ViewHolder发生关系

RecyclerView这个东西,如果看成是一个知识体系,那么它有这么几个关键因素:
1. 容器 ,RecyclerView本身
2. 布局管理器,RecyclerView.LayoutManager
3. 回收复用机制, RecyclerView.Recycler> 4. 适配器,RecyclerView.Adapter
当然,它的内部类当然不止这么几个,各有各的作用,今天探索复用机制,就涉及到了这么几个。

Android 开发相关源码精编解析

随着Android开发行业逐渐饱和,对Android开发者的面试要求也越来越高,是否掌握底层源码,便是考验一名Android开发者的重要一环。面试被问到源码问题答不出来,会掉身价、砍薪资尚且不谈,甚至连面试都过不了!

网上各类源码解析的文章博客五花八门、良莠不齐。杂乱、要么内容质量太浅,零散、碎片化,总看着看着就衔接不上了。

所以特意将我在疫情期间花了4个月整理出来的《Android 开发相关源码精编解析》分享出来大家

由于内容较多,避免影响到大家的阅读体验,在此只截图展示目录部分,487详细完整版的《Android 开发相关源码精编解析》电子书文档领取方式:**点赞+关注,然后私信关键词 【666】**即可加我的个人微信私发给你(无偿)。也欢迎大家找我探讨Android技术问题~

**目录:一共18节,487页PDF,**包括MMKV 源码,ARouter 源码,AsyncTask 源码,Volley 源码,Retrofit 源码,OkHttp 源码,ButterKnife 源码,Okio 源码,SharedPreferences 源码,EventBus 源码,Android 自定义注解初探,View 的工作机制源码分析,Android 触摸事件分发机制源码分析,Android 按键事件分发机制源码分析,深入解析 Handler 源码,深入解析 Binder 源码,深入解析 JNI 源码,深入解析 Glide 源码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《Android 开发相关源码精编解析》电子书文档领取方式:点赞+关注,然后私信关键词 【666】即可获得免费领取方式!

对文章有何见解,或者有何技术问题,欢迎在评论区给我留言讨论,都会回复的。

!**

对文章有何见解,或者有何技术问题,欢迎在评论区给我留言讨论,都会回复的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值