RecyclerView 优化
- 数据处理和视图加载分离;
- 数据优化:
a.分页获取远端数据
b.对远端数据进行缓存,提升二次加载的速度
c.对于新增或者删除数据使用DiffUtil来进行局部刷新,而不是一味地全局刷新数据 - 布局优化
a.减少过渡绘制
b.减少xml文件inflate的时间
c.减少View对象的创建
其他
升级 RecycleView 版本到 25.1.0 及以上使用 Prefetch 功能,可参考 RecyclerView 数据预取。
如果 Item 高度是固定的话,可以使用 RecyclerView.setHasFixedSize(true); 来避免 requestLayout 浪费资源;
设置RecyclerView.addOnScrollListener(listener); 来对滑动过程中停止加载的操作。
如果不要求动画,可以通过 ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false); 把默认动画关闭来提神效率。
对 TextView 使用 String.toUpperCase 来替代 android:textAllCaps=”true”。
对 TextView 使用 StaticLayout 或者 DynamicLayout 的自定义 View 来代替它。
通过重写 RecyclerView.onViewRecycled(holder) 来回收资源。
通过 RecycleView.setItemViewCacheSize(size); 来加大 RecyclerView 的缓存,用空间换时间来提高滚动的流畅性。
如果多个 RecycledView 的 Adapter 是一样的,比如嵌套的 RecyclerView 中存在一样的 Adapter,可以通过设置 RecyclerView.setRecycledViewPool(pool); 来共用一个 RecycledViewPool。
对 ItemView 设置监听器,不要对每个 Item 都调用 addXxListener,应该大家公用一个 XxListener,根据 ID 来进行不同的操作,优化了对象的频繁创建带来的资源消耗。
通过 getExtraLayoutSpace 来增加 RecyclerView 预留的额外空间(显示范围之外,应该额外缓存的空间),如下所示:
1 | new LinearLayoutManager(this) { |