RecyclerView和ListView区别

缓存机制

ListView的RecycleBin机制

首先,你将会有一个view数组mActiveViews,还有一个ArrayList<View>的mScrapView,这两个的作用有什么用呢。列表展示数据的时候,假设有十条数据在屏幕上面,其他数据都在屏幕外面(也就是用户看不到的地方)。那么屏幕正在使用的这十条数据就会存储在mActiveViews中,里面的View只能被获取一次,如果移出屏幕后被废弃的view就会到mScrapView(这个时候已经没有pos信息和数据信息了)。当getview方法调用时,如果convertView不为空,就可以直接重用,从废弃的view中获得,但是要重新bindview。
这里引用Android ListView 与 RecyclerView 对比浅析—缓存机制的图片来说明listview的获取缓存过程

ListView获取缓存过程

RecyclerView的缓存机制

RecyclerView有四级缓存,分别是mAttachedScrap(屏幕内缓存),mCacheViews(屏幕外的缓存),mViewCacheExtensions(自定义缓存),mRecycledViewPool(缓存池)。
缓存过程就是当我滑动屏幕时候,最近被移出屏幕外的viewholder就会放到mCacheViews上面,这个时候是含有pos信息和数据信息的,如果他满了且没有实现自定义缓存,就会把老的viewholder放到缓存池中,这个时候缓存池里面的是没有数据信息的,如果你要复用的话就要重新bindview。
如果我要获取缓存的话,就按顺序来读取,先去判断mAttachedScrap有没有,有的话直接拿来用,然后判断mCacheViews,接着判断自定义缓存。如果都没有再去缓存池里判断,没有的话就createViewHolder,有的话就bindViewHolder。


RecyclerView获取缓存过程

布局

  • ListView只能竖着布局
  • RecyclerView可以提供线性布局,网格布局,瀑布流布局,也可以选择竖着还是横着

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容