- dispathLayoutStep2():真正测量布局大小,位置,核心函数为layoutChildren();
- dispathLayoutStep3():计算布局前后各个ItemView的状态,如Remove,Add,Move,Update等,如有必要执行相应的动画.
其中,layoutChildren()流程图:
当调用notifyItemRemoved时,会对屏幕内ItemView做预处理,修改ItemView相应的pos以及flag(流程图中红色部分):
当调用fill()中RecyclerView.getViewForPosition(pos)时,
1.2.2缓存刷新机制总结(ListView和RecyclerView最大的区别在于数据源改变时的缓存的处理逻辑)
RecyclerView通过对pos和flag的预处理,使得bindview只调用一次.
ListView是”一锅端”,将所有的mActiveViews都移入了二级缓存mScrapViews,
而RecyclerView则是更加灵活地对每个View修改标志位,区分是否重新bindView。
1.2.2 字节RecyclerView面试题(相对于ListView RecyclerView 具备哪些优点)
RecyclerView 相比 ListView 在基础使用上的区别主要有如下几点:
ViewHolder 的编写规范化了
RecyclerView 复用 Item 的工作 Google 全帮你搞定,不再需要像 ListView 那样自己调用 setTag
RecyclerView 需要多出一步 LayoutManager 的设置工作
1 更加方便的实现自定义功能
-
Android 优雅的为RecyclerView添加HeaderView和FooterView
-
Android 默认提供的 RecyclerView 就能支持 线性布局、网格布局、瀑布流布局 三种 ,而且同时还能够控制横向还是纵向滚动。怎样,从效果上足以碾压 ListView 有木有。
横向滚动的ListView开源控件是不是可以不用再找了?对,你没看错!
瀑布流效果的开源控件是不是可以不用再找了?对,你没看错!
连横向滚动的GridView都不用找了!对,你没看错!
2 自定义LayoutManager
而 LayoutManager 只是一个抽象类而已,系统已经为我们提供了三个相关的实现类:
- LinearLayoutManager(线性布局效果)
- GridLayoutManager(网格布局效果)
- StaggeredGridLayoutManager(瀑布流布局效果)
RecyclerView 基础使用关键点同样有两点:
- 继承重写 RecyclerView.Adapter 和 RecyclerView.ViewHolder;
- 设置布局管理器,控制布局效果
系统也为我们提供了两个默认的动画实现:SimpleItemAnimator 和 DefaultItemAnimator。而 RecyclerView 在不手动调用 setItemAnimator 的情况下,则默认用了内置的 DefaultItemAnimator 。
RecyclerView缓存机制总结
主要靠三个内部类来完成,
Recycler
ViewCacheExtension
RecyclerViewPool:
-
首先通过 recycler.getViewForPosition()方法,该方法返回ViewHolder对象,通过源码可以知道,该方法会检查mAttachedScrap和一级缓存列表mCachedViews,如果有则返回ViewHolder进行复用。
-
然后调用ViewCacheExtension.getViewForPositionAndType()方法,注意这个方法是抽象方法,需要开发者进行重写。
-
最后检查RecyclerViewPool是否有ViewHolder。
注意:上述的三个步骤中,只要有一个返回了ViewHolder,就不会在进行后边的步骤了。 最后:缓存的数量:默认的一级缓存中,mCachedViews中可以缓存的ViewHolder的个数是2;默认的缓存池中的缓存数量是 5;所以在缓存时,会先检测一级缓存是否满了,如果没满就add进去,如果满了就加入到三级缓存Recyclerpool
小编在网上收集了一些 Android 开发相关的学习文档、面试题、Android 核心笔记等等文档,希望能帮助到大家学习提升,如有需要学习参考的可以直接去我 GitHub地址:https://github.com/733gh/Android-T3访问查阅。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
总结
最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-IJDU5DIF-1712663145189)]