What recyclerview是什么?
A flexible view for providing a limited window into a large data set.
有什么好处,优点?
RecyclerView 可以让您轻松高效地显示大量数据。您提供数据并定义每个列表项的外观,而 RecyclerView 库会根据需要动态创建元素。
顾名思义,RecyclerView 会回收这些单个的元素。当列表项滚动出屏幕时,RecyclerView 不会销毁其视图。相反,RecyclerView 会对屏幕上滚动的新列表项重用该视图。这种重用可以显著提高性能,改善应用响应能力并降低功耗。
如何使用?
https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=zh-cn
原理是什么?
四级缓存
变量 作用
mChangedScrap 与RecyclerView分离的ViewHolder列表
mAttachedScrap 未与RecyclerView分离的ViewHolder列表
mCachedViews ViewHolder缓存列表
mViewCacheExtension 开发者可以控制的ViewHolder缓存的帮助类
mRecyclerPool ViewHolder缓存池
调用流程图
总结
经过上面的分析,我们可以看出RecyclerView 缓存机制(Recycler)大致可以分为5级。
第一级 通过mChangedScrap匹配 position或者id获取holder缓存。
第二级 从mAttachedScrap中通过匹配position获取holder缓存,或者通过ChildHelper找到隐藏但是没有被移除的View,通过getChildViewHolderInt(view)方法获取holder缓存,或者
从mCachedViews中通过匹配position获取holder缓存。
第三级 从mAttachedScrap中通过匹配id获取holder缓存,或者
从mCachedViews中通过匹配id获取holder缓存。
第四级 从ViewCacheExtension获取holder缓存。
第五级 通过RecyclerView 的ViewHolder缓存池获取holder。
参考:
https://zhooker.github.io/2017/08/14/%E5%85%B3%E4%BA%8ERecyclerview%E7%9A%84%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6%E7%9A%84%E7%90%86%E8%A7%A3/
https://blog.csdn.net/zhangqilugrubby/article/details/53463875
https://www.cnblogs.com/jimuzz/p/14040674.html