相比 XML , Compose 性能到底怎么样?

本文对比了Android Compose与XML在构建速度和运行时渲染性能上的差异。测试结果显示,Compose显著提高了构建速度,平均构建时间缩短了XX%。对于运行时性能,作者通过不同配置的测试,探讨了Compose对页面启动时间、启动完成时间和渲染绘制完成时间的影响。测试在多种设备上进行,结论表明Compose在渲染性能上有优势。
摘要由CSDN通过智能技术生成

结果如下图所示:

p4.png

可以看出,在迁移到Compose后,毫无意外的,XML代码行减少了76%

有趣的是kotlin代码同样减少了,可能是因为我们可以减少很多模板代码,同时也可以移除之前写的一些View Helper代码

构建速度

随着项目的不断变大,构建速度是开发人员越来越关心的一个指标。

在开始重构之前,我们知道,删除大量的注解处理器会有助于提高构建速度,但我们不确定会有多少。

我们运行以下命令5次,然后取平均值

./gradlew --profile --offline --rerun-tasks --max-workers=4 assembleDebug

结果如下

p3.png

这里考虑的是调试构建时间,您在开发期间会更关注此时间。

在迁移到Compose前,Tivi 的平均构建时间为 108.71 秒。

在完全迁移到 Compose 后,平均构建时间缩短至 76.96 秒!构建时间缩短了 29%

构建时间能缩短这么多,当然不仅仅是Compose的功劳,在很大程度上受两个因素的影响:

  1. 一个是移除了使用注解处理器的DataBindingEpoxy

  2. 另一个是HiltAGP 7.0 中的运行速度更快。

运行时性能


上面我们介绍了Compose在构建时的性能,下面来看下Compose在运行时渲染的性能怎么样

分析前的准备

使用Compose时,可能有多种影响性能的指标

  • 如果我们完全在Compose中构建UI会怎样?

  • 如果我们对复杂视图使用Compose(例如用 LazyColumn 替换 RecyclerViews),但根布局仍然添加在XML

  • 如果我们使用Compose替换页面中一个个元素,而不是整个页面,会怎么样?

  • 是否可调试和R8编译器对性能的影响有多大?

为了开始回答这些问题,我们构建了一个简单的测试程序。

在第一个版本中,我们添加了一个包含50个元素的列表(其中实际绘制了大约 12 个)。该列表包括一个单选按钮和一些随机文本。

p5.jpeg

为了测试各种选项的影响,我们添加以下4种配置,以下4种都是开启了R8同时关闭了debug

  1. 纯Compose

  2. 一个XML中,只带有一个ComposeView,具体布局写在Compose

  3. XML中只包含一个RecyclerView,但是RecyclerView的每一项是一个ComposeView

  4. XML

同时为了测试build type对性能的影响,也添加了以下3种配置

  1. Compose,关闭R8并打开debug

  2. Compose,关闭R8并关闭debug

  3. XML,关闭R8并打开debug

如何定义性能?

Compose运行时性能,我们一般理解的就是页面启动到用户看到内容的时间

因此下面几个时机对我们比较重要

  1. Activity启动时间,即onCreate

  2. Activity启动完成时间,即onResume

  3. Activity渲染绘制完成时间,即用户看到内容的时间

onCreateonResume的时机很容易掌握,重写系统方法即可,但如何获得Activity完全绘制的时间呢?

我们可以给页面根View添加一个ViewTreeObserver,然后记录最后一次onDraw调用的时间

使用Profile查看上面说的过程,如下分别为使用XML渲染与使用Compose渲染的具体过程,即从OnCreate到调用最后一次onDraw的过程

使用XML

使用Compose

渲染性能分析

知道了如何定义性能,我们就可以开始测试了

  1. 每次测试都在几台设备上运行,包括最近的旗舰、没有Google Play服务的设备和一些廉价手机。

  2. 每次测试在同一台手机上都会运行10次,因此我们不仅可以获取首次渲染时间,也可以获取二次渲染时间

  3. 测试Compose版本为1.0.0

我们根据上面定义的配置,重复跑了多次,得到了一些数据,感兴趣的同学可以直接查看所有数据

p8.png

分析结果如上图所示,我们可以得出一些结论
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

新的开始

改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

《系列学习视频》

《系列学习文档》

《我的大厂面试之旅》

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

12019107912)]

《系列学习文档》

[外链图片转存中…(img-PALmTftZ-1712019107912)]

《我的大厂面试之旅》

[外链图片转存中…(img-8dXiLRSe-1712019107913)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>