recyclerview 缓存讲解
自己的理解:
1 首先明确recyclerView 的缓存一共有四个:
1.1 mAttachedScrap
1.2 mChangedScrap
1.3 mCachedViews
1.4 mRecyclerPool
这四个大家都耳熟能详。。。。
2 这四个缓存的区别:
2.1 mAttachedScrap 与 mChangedScrap 这两个缓存一般是说的布局的时候的缓存(比如调用remove,notifyItemRangeChanged 等等)。
布局分为pre-layout与post-layout,两个布局的整体流程都差不多:detachViewAt(移除view从ViewGroup 即recyclerView) -> recycler.scrapView(缓存页面上的view到mAttachedScrap 或者mChangedScrap)->fill(重新布局)
pre-layout 与post-layout的唯一区别就是预布局执行fill的时候会忽略移除view的空间,并将最终需要显示的view提前加载在屏幕外面,方便post-layout计算各个view的移动距离,好做移动动画。
查看文章:https://juejin.im/post/6892809944702124045#heading-3
https://mp.weixin.qq.com/s/auphzaQF6_wJx6dGFY6niA
2.2 mCachedViews 与 mRecyclerPool 这两个缓存一般说的是页面滑动的时候的缓存。
2.3 mAttachedScrap 与 mChangedScrap 如果在布局完成之后还有多余的ViewHolder 也会直接全部丢进mRecyclerPool