前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RecyclerView 的性能优化

RecyclerView 的性能优化

作者头像
艳龙
发布2021-12-16 17:32:20
4400
发布2021-12-16 17:32:20
举报
文章被收录于专栏:yanlongli_艳龙yanlongli_艳龙

之前一篇文章介绍了 ListView 和 RecyclerView 的对比, 这里继续记录下RecyclerView中常用的性能优化方案。

优化方案1:关于点击事件

RecyclerView尽量在onCreateViewHolder()设置点击事件,而不在onBindViewHolder()中设置点击事件。让 View - ViewHolder - ClickListener 是 1-1-1 的对应关系。

优化方案2:RecyclerView嵌套布局

在嵌套布局中(竖则滚动 + 局部横向滚动),可以在内部嵌套的RecyclerView中设置LinearLayoutManager.setInitialPrefetchItemCount(int count)

setInitialPrefetchItemCount() 只在线性布局中才有这个函数,且在内部嵌套RecyclerView设置才有效。 不过 这个方法可以提升 内部嵌套RecyclerView的预加载性能。

优化方案2:RecyclerView局部刷新

notifyDataSetChanged() : 一个常用的数据刷新方法,所有数据全部刷新,性能较低,在可以局部刷新的情况下不建议使用该函数。

notifyItemChanged(int position): 刷新指定postion位置上的数据(需要准确知道变化数据的postion)

DiffUtil: 查找新/旧 数据的差异,然后执行差异中的变化。(推荐使用)

代码语言:javascript
复制
void onNewDataArrived(List<News> news) {
    List<News> oldNews = myAdapter.getItems();
    // diff判断逻辑,建议放在异步线程中,diff结束后,结果在主线程中刷新
    DiffResult result = DiffUtil.calculateDiff(new MyCallback(oldNews, news));
    myAdapter.setNews(news);
    result.dispatchUpdatesTo(myAdapter);
}

END!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/1/7 下午,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优化方案1:关于点击事件
  • 优化方案2:RecyclerView嵌套布局
  • 优化方案2:RecyclerView局部刷新
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档