Android - 简单解释RecyclerView的四级缓存

RecyclerView缓存的是ViewHolder,即每个ItemView

  1. ItemView的加载
    因为每个ItemView由xml加载成为View (onCreateViewHolder方法) ,是一个深度遍历的过程,并且是通过反射来获取的每个View,这其实是一个耗时的操作。如果每个子ItemView都通过这种方法去加载,是非常不合适滴。所以需要缓存。

  2. 四级缓存
    界面上的View缓存 :mAttachedScrap
    刚刚移出屏幕的缓存: mCachedViews
    自定义缓存:mViewCacheExtension
    缓存池:mRecyclerPool

  • mAttachedScrap在屏幕中的缓存,用于数据刷新时,不需要重新加载子ItemView,直接复用;

  • mCachedViews刚刚移出屏幕的缓存,最大容量为2,通过position来保存,数据不变,直接复用;滑动时,该缓存一边add,一边remove。

  • mViewCacheExtension自定义缓存,基本用不上

  • mRecyclerPoor保存第二级缓存中保存不了的ItemView。通过itemType来保存,每种itemType可以保存5个ItemView。具体缓存结构如下图:

    RecycledViewPool.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容