Android ListView 与 RecyclerView 对比浅析--缓存机制


注意:需要先看1


1.本文转自:Android ListView 与 RecyclerView 对比浅析–缓存机制
https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653578065&idx=2&sn=25e64a8bb7b5934cf0ce2e49549a80d6&chksm=84b3b156b3c43840061c28869671da915a25cf3be54891f040a3532e1bb17f9d32e244b79e3f&scene=4#wechat_redirect

2.阅读后的总结笔记:
(1)ListView和RecyclerView的缓存机制原理上讲大致相似:
在这里插入图片描述
移出屏幕的itemView会被回收到缓存中,然后进入屏幕的ItemView,会先从缓存中获取这样。主要的差异点在于如下文。
(2)缓存的层级不同
(I)RecyclerView比ListView多两级缓存;ListView有mActiveViews和mScrapViews;然后RecyclerView有:mAttachedScrap;mCachedViews,mViewCacheExtension(不直接使用,需用户定制),mRecyclerPool。
(3)缓存的内容不同
ListView缓存的是View;但RecyclerView缓存的是RecyclerView.ViewHolder,即View + ViewHolder(避免每次createView时调用findViewById)+ flag(标识状态);
(4) RecyclerView提供了局部刷新
二者之间的最大区别在于,数据源改变时的缓存处理逻辑,ListView是将所有的
mActiveViews都移动到了mScrapViews的回收缓存中;但RecyclerView是更加灵活的对每个View修改标志位,区分是否重新bindView。
比如在RecyclerView调用notifyItemRemoved(1)时,会对屏幕内的ItemView做预先处理,修改相应的pos已经flag(流程图中红色部分)
在这里插入图片描述
当调用fill()中的RecyclerView.getViewForPosition(pos)时,Recycler通过对pos和flag的预处理,使得bindView只调用一次。
(5)总结差异与使用
(I)在一些相对固定,数据变更不频繁的场景,界面初始化化,滑动等ListView和RecyclerView都能很好工作并无很大差异,然后ListView的使用上会简易一些。
(II)在需要支持动画,或者数据源频繁更新,需要局部刷新的场景,如弹幕。时RecyclerView会更好。

3参考
(1)What is the benefit of ViewHolder pattern in android?
https://stackoverflow.com/questions/21501316/what-is-the-benefit-of-viewholder-pattern-in-android
(2)Android RecyclerView Sample
https://github.com/android/views-widgets-samples/tree/master/RecyclerView/#readme

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值