主要观点总结
本文主要介绍了RecyclerView的缓存复用机制,包括其主要的缓存结构如mChangedScrap、mAttachedScrap、mCachedViews、mViewCacheExtension和mRecyclerPool的作用和流程,以及如何通过这些缓存结构来避免重复创建视图和重复执行昂贵的findViewById,从而提高性能、提升应用响应能力、降低功耗。
关键观点总结
关键观点1: RecyclerView的缓存复用机制是高效展示列表数据的关键
RecyclerView通过缓存结构来缓存已经移出屏幕的列表项,以便快速复用,提高性能。
关键观点2: 主要的缓存结构及其作用
mChangedScrap主要用于缓存开启了列表项动画并且列表项数据发生变化的场景;mAttachedScrap用于缓存其他大部分场景,如列表项移动或数据未发生变化的场景;mCachedViews用于缓存已被移出屏幕但可能很快重新进入屏幕的列表项;mViewCacheExtension和mRecyclerPool则提供了额外的缓存层级和按不同itemType分别存放超出mCachedViews限制的列表项。
关键观点3: 缓存复用的流程
当列表项移出屏幕时,会先尝试从mAttachedScrap和mCachedViews查找可复用的ViewHolder对象,如果没有找到合适的,再从mRecyclerPool中查找,最后才需要执行onCreateViewHolder和onBindViewHolder的回调。
关键观点4: 优化建议
为了充分利用缓存复用机制,应该尽量减少不必要的列表项动画,合理设置缓存结构的大小,以及避免频繁的数据变化。
文章预览
ViewPager2是在RecyclerView的基础上构建而成的,意味着其可以复用RecyclerView对象的绝大部分特性,比如缓存复用机制等。 作为ViewPager2系列的第一篇,本篇的主要目的是快速普及必要的前置知识,而内容的核心,正是前面所提到的RecyclerView的缓存复用机制。 RecyclerView,顾名思义,它会 回收其列表项视图以供重用 。 具体而言, 当一个列表项被移出屏幕后,RecyclerView并不会销毁其视图,而是会缓存起来,以提供给新进入屏幕的列表项重用 ,这种重用可以: 避免重复创建不必要的视图。 避免重复执行昂贵的 findViewById 。 从而达到的改善性能、提升应用响应能力、降低功耗的效果。而要了解其中的工作原理,我们还得回到RecyclerView是如何构建动态列表的这一步。 1 RecyclerView是如何构建动态列表的? 与RecyclerView构建动态列表相关联的几个重要类中,Adapter与
………………………………