专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
今天看啥  ›  专栏  ›  鸿洋

画了10张图,带你搞定RecyclerView的缓存复用机制

鸿洋  · 公众号  · android  · 2024-12-12 08:35
    

主要观点总结

本文主要介绍了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与 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览