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来展示。

你可能感兴趣的:(RecyclerView的性能优化)