RecyclerView 缓存机制
RecyclerView 的缓存机制为 4 级缓存,缓存的内容为 ViewHolder,而不是 View 本身. Recycler 类为缓存相关的类:
|
|
缓存可分为:
一级缓存 Scrap
屏幕内的缓存。包含 mAttachedScrap 和 mChangedScrap。它们是 RecyclerView 内部控制的缓存,本例暂时忽略
二级缓存 Cache
mCachedViews:缓存ViewHolder,类型为 ArrayList。刚刚滑出屏幕 ViewHolder 的缓存。默认容量为 2
三级缓存 ViewCacheExtension
自定义的缓存,很少会用到,暂时忽略
四级缓存 RecycledViewPool
ViewHolder 缓存池。当二级缓存容量超过 2 时,按照先进先出的原则,Cache 中的 ViewHolder 会保存到 RecycledViewPool 中。
整体流程如下:
Recycler首先去二级缓存(Cache)里面查找是否命中,如果命中直接返回。如果二级缓存没有找到,则去四级缓存查找,如果四级缓存找到了则调用 Adapter.bindViewHolder 来绑定内容,然后返回。如果四级缓存没有找到,那么就通过 Adapter.createViewHolder 创建一个 ViewHolder,然后调用 Adapter.bindViewHolder 绑定其内容,然后返回为 Recycler。
流程图可参考(来源网络,侵删):
参考文章:

