0%

Android_RecyclerView优化

RecyclerView 优化
  1. 数据处理和视图加载分离;
  2. 数据优化:
    a.分页获取远端数据
    b.对远端数据进行缓存,提升二次加载的速度
    c.对于新增或者删除数据使用DiffUtil来进行局部刷新,而不是一味地全局刷新数据
  3. 布局优化
    a.减少过渡绘制
    b.减少xml文件inflate的时间
    c.减少View对象的创建
其他
  1. 升级 RecycleView 版本到 25.1.0 及以上使用 Prefetch 功能,可参考 RecyclerView 数据预取。

  2. 如果 Item 高度是固定的话,可以使用 RecyclerView.setHasFixedSize(true); 来避免 requestLayout 浪费资源;

  3. 设置RecyclerView.addOnScrollListener(listener); 来对滑动过程中停止加载的操作。

  4. 如果不要求动画,可以通过 ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false); 把默认动画关闭来提神效率。

  5. 对 TextView 使用 String.toUpperCase 来替代 android:textAllCaps=”true”。

  6. 对 TextView 使用 StaticLayout 或者 DynamicLayout 的自定义 View 来代替它。

  7. 通过重写 RecyclerView.onViewRecycled(holder) 来回收资源。

  8. 通过 RecycleView.setItemViewCacheSize(size); 来加大 RecyclerView 的缓存,用空间换时间来提高滚动的流畅性。

  9. 如果多个 RecycledView 的 Adapter 是一样的,比如嵌套的 RecyclerView 中存在一样的 Adapter,可以通过设置 RecyclerView.setRecycledViewPool(pool); 来共用一个 RecycledViewPool。

  10. 对 ItemView 设置监听器,不要对每个 Item 都调用 addXxListener,应该大家公用一个 XxListener,根据 ID 来进行不同的操作,优化了对象的频繁创建带来的资源消耗。

  11. 通过 getExtraLayoutSpace 来增加 RecyclerView 预留的额外空间(显示范围之外,应该额外缓存的空间),如下所示:

1
2
3
4
5
6
new LinearLayoutManager(this) {
@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
return size;
}
};