android listview 资源回收,【Android】ListView RecyclerView

本文探讨了RecyclerView的高效缓存策略,包括 ViewHolder重用、布局管理器的职责、ListView与RecyclerView的比较,以及RecyclerView如何通过mCacheViews和mRecyclerPool增强缓存效果。核心内容涉及View复用、高度固定、分页加载和布局调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.convertView不能重复创建

2.每次不需要重新findViewByID

3.高度固定

4.分页加载

RecyclerView并不处理布局,只处理资源的回收,将资源分为几级缓存进行复用,理解RecyclerView从两个方向入手,一是回收,二是布局。

回收本身由RecycerView实现,逐层降级,如果最后也没找到,会调用onCreateViewHolder,如果已有这个View会直接取出来,如果数据改变了,就调用onBindViewHolder。

LayoutManager主要处理两个问题,一是OnLayoutChildren,二是处理滑动时的取出和释放资源。

bVbBvOM

bVbBvON

ListView和RecyclerView缓存机制基本一致:

1). mActiveViews和mAttachedScrap功能相似,意义在于快速重用屏幕上可见的列表项ItemView,而不需要重新createView和bindView;

2). mScrapView和mCachedViews + mReyclerViewPool功能相似,意义在于缓存离开屏幕的ItemView,目的是让即将进入屏幕的ItemView重用.

3). RecyclerView的优势在于a.mCacheViews的使用,可以做到屏幕外的列表项ItemView进入屏幕内时也无须bindView快速重用;b.mRecyclerPool可以供多个RecyclerView共同使用,在特定场景下,如viewpaper+多个列表页下有优势.客观来说,RecyclerView在特定场景下对ListView的缓存机制做了补强和完善。

缓存不同:

1). RecyclerView缓存RecyclerView.ViewHolder,抽象可理解为:

View + ViewHolder(避免每次createView时调用findViewById) + flag(标识状态);

2). ListView缓存View。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值