Android-Daily-Interview
Android-Daily-Interview copied to clipboard
2019-11-05:谈谈RecyclerView的缓存机制?
- 二级缓存。
- Scrap做了什么?
- Recycler做了什么?
- 如何复用?
listview是2级缓存 Active View,Scrap view RecyclerView的缓存分为四级:Scrap,Cache,ViewCacheExtension,RecycledViewPool 这里有篇文章,解释的很详细http://www.360doc.com/content/19/0712/11/36367108_848240455.shtml
你说二级缓存,其实recyclerView缓存细分不止二级. 我来说说我的看法 scrap viewCache recyclerPool
scrap 是当前展示的缓存, 在onlayout时候 缓存 viewCache 是屏幕外看不见的缓存, 可以吧viewCache设置大点,空间换时间 避免段距离内快速滑动卡顿 以上两种缓存是不走 createView和 onbind recyclerPool 比较特殊他是会走 onbind的,他可以被多个recyclerView共享内部的item,实际用途是:多个recyclerView之间共享item,应用在 垂直recyclerView 内嵌水平recyclerView,或者viewpager中多个recyclerView 网易新闻首页
RecyclerView的缓存机制有四层 1,mChangedScrap和mAttachedScrap 用来缓存屏幕内的ViewHolder 2,mCachedViews(size=2先进先出) 用来缓存移除屏幕外的ViewHolder 默认size=2 如果再添加时size>2 取出第0个存入mRecyclerPool 然后移除mCachedViews第0个 再添加新的ViewHolder 3,mViewCacheExtension 自定义缓存 提供开发者 自定义缓存 4,mRecyclerPool(size=5) recyclerPool 缓存池 以type分块每块size=5 mCachedViews空间满时添加到mRecyclerPool缓存 mCachedViews找不到ViewHoler时去mRecyclerPool获取
https://www.jianshu.com/p/3e9aa4bdaefd