RecyclerView的性能优化

1. 布局优化

减少过度绘制

减少布局层级,简单布局可以使用FameLayout,复杂布局可以自己自定义布局,或者使用ConstraintLayout。

减少xml文件inflate的时间

这里的xml文件不仅包括layout的xml,还包括drawable的xml,xml文件inflate出itemView是通过耗时的IO操作来完成的,尤其是item的复用率低的情况下,随着viewType的增多,这种inflate带来的损耗是相当大的。这种情况下就可以通过代码生成布局的方式去优化。

减少View对象的创建

尽可能的简化itemView,以减少View的创建

2.其他

  • 对于点击事件等等的监听,可以共用同一个监听器,通过position或者其他id之类的东西来进行不同的操作。
  • 对于多个拥有相同Adapter的RecyclerView(比如嵌套RecyclerView)来说,可以通过setRecycledViewPool方法来共享同一个RecycledViewPool。
  • 可以通过setItemViewCacheSize,来增大RecyclerView的缓存,以空间换时间,提高滚动的流畅性。
  • 对于item的高度一致的情况,可以通过设置RecyclerView.setHasFixedSize(true);来避免频繁的requestLayout浪费资源。
  • 尽量不用notifyDataSetChange()来更新数据,应该用notifyItemChanged(int position)notifyItemChanged(int position, @Nullable Object payload)等等更新局部item数据的方法;对于新增或者删除数据可以通过DiffUtil来局部刷新数据。
  • 对于有些数据需要特殊处理的情况,比如日期格式转换、Html.fromHtml()等比较耗时的操作,应当在请求导数据的时候就直接异步处理完成后,再交给RecyclerView来展示。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容