Allocation Tracker 优化 RecyclerView 滚动性能实战

作者: rain 分类: 移动 发布时间: 2016-10-26 23:13 6 条评论

本实践来至于 workable 的工程师 Pavlos-Petros Tournaris. 介绍了在 Workable 安卓应用中 RecyclerView 滚动不流畅的问题,以及如何使用 Allocation Tracker 来定位问题并优化滚动流畅性。

TableLayout

在 Workable 安卓应用中,使用 TableLayout 来显示候选人的信息布局, Allocation Tracker 报告显示 TableLayout 消耗了很多资源。 最后他们使用 LinearLayout 和 layout_weight 属性来实现同样的布局,性能比 TableLayout 要好一些。

优化之前的布局:

优化之后的布局:

注意:把 TableLayout 替换为 LinearLayout 对性能只有很少的提升。

android:textAllCaps=”true”

在 Allocation Tracker 报告中显示,设置了一个字段的大写字母形式会导致很多内存申请(allocation)。后来使用 String 对象的 .toUpperCase() 函数来转换字符串,发现效果要好很多。

优化之前的布局文件:

优化为使用 Java 代码:

下图为 TextView textAllCaps 属性设置为 true 的时候,内存申请的情况报告:

image

通过查看 TextView 的代码发现,当设置 textAllCaps 为 true 的时候, TextView 内部每次都创建一个新的 Transformation 来处理字符串:

image

在 RecyclerView 和 ListView 这种滚动布局中使用这种方式是有问题的。

RecyclerView.onViewRecycled()

RecyclerView.onViewRecycled() 函数在一个 View 被回收的时候调用,所以在这个函数里面可以释放资源。 Workable 应用中使用了 DataBinding, 所以在这个函数中取消 OnPropertyChangedCallbacks 并清理 ViewModel 上的数据绑定操作,则可以提高性能。同时还可以释放 Glide 加载的用户头像图片资源。

RecyclerView 缓存

为了更好的提高滚动的流畅性,可以加大 RecyclerView 的缓存,用空间换时间:

结论

Allocation Tracker 可以很方便的查看内存情况,对于分析界面卡顿非常有效,每个开发者都应该熟练使用 Allocation Tracker 来解决内存以及性能问题。

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=1024

Ɣ回顶部