RecyclerView的卡顿分析与解决方案

RecyclerView是Android开发中常见的组件之一,也是官方推荐的ListView的替代品。然而在实际使用中我遇到了RecyclerView卡顿的问题,在这里记录一下。也综合总结网上其他可能发生卡顿的情况和解决方案。

 

通过归类分析,RecyclerView出现卡顿的问题可以分为以下两大类情况:

1.在UI线程进行网络任务或者其他耗时操作

2.图片数据过多或者过大

 

1的解决方法:

将耗时任务异步处理,addData部分放在UI线程中。

 

2数据过多的解决方法:

后端控制:请求接口添加分页参数以及每页显示数量,由后端返回分页参数和每页显示数量。

前端控制:对展示数据进行切分加工,复制并显示前100条等

推荐方案:后端控制,避免写死在app中旧版本不可控。

 

2图片过大的解决方法:

压缩图片,使用图片加载框架,图片格式调整,监听滑动完毕再进行加载,尽量在setAdapter前完成。

 

其他情况解决思路:

减少层级,自定义重写RecyclerView,减少过渡绘制区域,减少item中布局层级,局部刷新(指定具体position),使用缓存池recyclerviewPool,确定item高度以减少绘制次数(recyclerView.setHasFixedSize(true);)。

 

最后要提一点,谷歌官方不推荐嵌套Recyclerview。在实际使用中常常见到NestedScrollView嵌套RecyclerView的做法,这样会导致RecyclerView 的每条数据都会创建一个item,数据量大的时候会不断发生GC,最终影响UI线程。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerView卡顿的问题可能有多种原因。其中一种可能是由于频繁创建和销毁ViewHolder导致的。虽然使用ViewHolder可以复用布局,但是如果RecyclerView中的数据量很大,每次滚动时都需要创建和销毁大量的ViewHolder,就会导致卡顿。 为了解决这个问题,我们可以考虑使用RecyclerView的缓存机制,通过调整缓存的大小来减少ViewHolder的创建和销毁次数。 另外,嵌套RecyclerView也可能引起卡顿问题。尽管在实际使用中经常会看到NestedScrollView嵌套RecyclerView的做法,但是谷歌官方并不推荐这样做。因为每一条数据都会创建一个item,当数据量很大时,会不断发生垃圾回收(GC),进而影响UI线程的流畅度。 如果遇到这样的情况,我们可以考虑使用其他布局方式来代替嵌套RecyclerView,或者尝试对数据进行分页加载。 除了以上两个原因外,还有其他可能导致RecyclerView卡顿的情况,比如列表项布局复杂、数据处理耗时等。解决这些问题的方法也各有不同,可以根据具体情况进行优化。例如,可以尽量减少列表项布局的复杂度,避免使用过多的嵌套布局;对于数据处理耗时的情况,可以考虑使用异步操作或者分批处理数据。 综上所述,RecyclerView卡顿问题的解决方法包括优化ViewHolder的创建和销毁、避免嵌套RecyclerView以及针对具体情况进行其他优化措施。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [RecyclerView卡顿分析解决方案](https://blog.csdn.net/weixin_37228152/article/details/107525919)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [RecyclerView卡顿优化(一)](https://blog.csdn.net/likuan0214/article/details/51899400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值