前言
Android Jetpack Compose从2019年在Google I/O 大会上首度露脸,到2023年9月份发布 1.5.1 稳定版别已经有一些年头,但Compose的功能时至今日仍然是被开发者所诟病。
本篇文章,主要是满意笔者自己的好奇心,顺便运用Perfetto东西和我们一同测一测,这次新鲜出炉的 1.5.1 版别是否真的如官方所说的相同功能有所提高?
准备工作
- AndroidStudio:Android Studio Giraffe | 2022.3.1 Patch 1
- 一台Google Pixel4手机:搭载Android 12系统,敞开开发者选项,敞开HWUI呈现形式,选择在屏幕上显现为条形图,敞开显现刷新频率;
- 一个运用Android Jetpack Compose LazyColumn组件实现的列表App,集成滴滴开源的DoKit研制帮手。
测验方针
比照Android Jetpack Compose 1.4.1 和 1.5.1版别的LazyColumn组件的功能体现。实际上,从 1.3.0 起,Compose就对Modifier系统进行了重构,引进Modifier.Node作为Modifier.composed 的更高功能替代品,但这个进程不是一蹴而就的,需要时刻逐步去完结替换。由于时刻精力有限,笔者就不做 1.3.0 等其它版别的测验比照了。
温馨提示:Android官方推荐咱们运用 Compose 物料清单 (BoM),通过指定 BoM 的版别来管理所有 Compose 库版别。
BOM 与 Compose 库版别对应表点这里查看。
1.4.1 对应 2023.04.01,1.5.1 对应 2023.09.00
测验步骤
- 编写Shell脚本运用adb shell swipe命令模仿不断的在LazyColumn组件界面来回滑动;
- 运用Perfetto官方供给的record_android_trace辅佐脚本录制trace文件,继续10秒左右,每个版别录制10次;
- 运用Perfetto UI翻开录制好的trace文件,记载并统计android_frame_timeline_metric目标数据并汇总成表格;
LazyColumn组件界面没有很复杂,是从官方Jetchat项目复制过来的代码。看动图可以发现,左上角的屏幕刷新率和DoKit帧率是没有改变的。
测验数据
通过运用Perfetto获取android_frame_timeline_metric目标数据并汇总(每次10秒测10次),其中total_frames是运用的总帧数,missed_frames是运用丢帧的数量,fps是帧率=total_frames/时刻(秒)
或许测验方式不是很合理(可是配合脚本测验起来很方便),如有更好的方式,欢迎我们指教。
Android Jetpack Compose 1.4.1
测验数据部分截图如下:
android_frame_timeline_metric目标数据
进程timieline
每次10秒测10次数据汇总:
序号 | total_frames | missed_frames | fps |
---|---|---|---|
1 | 787 | 49 | 78.7 |
2 | 774 | 45 | 77.4 |
3 | 777 | 50 | 77.7 |
4 | 787 | 48 | 78.7 |
5 | 788 | 52 | 78.8 |
6 | 798 | 43 | 79.8 |
7 | 778 | 48 | 77.8 |
8 | 794 | 46 | 79.4 |
9 | 777 | 50 | 77.7 |
10 | 783 | 50 | 78.3 |
均匀帧数 | 均匀丢帧数 | 均匀每秒丢帧数 | 均匀帧率 | 均匀丢帧率 |
---|---|---|---|---|
784.3 | 48.1 | 4.81 | 78.4 | 5.77% |
注:均匀丢帧率 = 均匀丢帧数 / (均匀帧数+均匀丢帧数)
Android Jetpack Compose 1.5.1
测验数据部分截图如下:
android_frame_timeline_metric目标数据
进程timieline
每次10秒测10次数据汇总:
序号 | total_frames | missed_frames |
---|---|---|
1 | 807 | 30 |
2 | 825 | 23 |
3 | 825 | 19 |
4 | 832 | 13 |
5 | 840 | 8 |
6 | 830 | 13 |
7 | 838 | 8 |
8 | 842 | 7 |
9 | 846 | 10 |
10 | 837 | 8 |
均匀帧数 | 均匀丢帧数 | 均匀每秒丢帧数 | 均匀帧率 | 均匀丢帧率 |
---|---|---|---|---|
832.3 | 13.9 | 1.39 | 83.2 | 1.64% |
注:均匀丢帧率 = 均匀丢帧数 / (均匀帧数+均匀丢帧数)
数据比较
Compose版别 | 均匀帧数 | 均匀丢帧数 | 均匀每秒丢帧数 | 均匀帧率 | 均匀丢帧率 |
---|---|---|---|---|---|
1.4.1 | 784.3 | 48.1 | 4.18 | 78.4 | 5.77% |
1.5.1 | 832.3 | 13.9 | 1.39 | 83.2 | 1.64% |
清楚明了,运用相同的机型,相同的测验代码,1.5.1 相对 1.4.1帧率更高丢帧更少,虽然不能说是遥遥领先,但确实是有显著提高,而且比照Timeline也很显着。
注:或许我们会觉得测验的时刻短或者测验的次数小导致样本数据小不合理,可是实际上笔者通过屡次测验发现(延长时刻和添加测验次数),基本上这俩个版别的数据距离在Android 12系统的Google Pixel4上差不多就是这样,仅仅限于篇幅就不过多展现了数据了,感兴趣并且有条件有时刻的朋友可以自己测验看看,或许的话参加更多的版别,机型进行比照。
定论
因测验机型、时刻和精力等方面的限制,本次测验并不严谨,测验数据也仅供参考。但仍然可以用这个小样本数据来答复本文开头提出的疑问:
Android Jetpack Compose 1.5.1 功能有显着提高,体验上更加丝滑了,主张我们赶忙晋级。
正如Android官方所说的那样,Android Jetpack Compose很努力,功能正在变得越来越好。
什么?还没用上Jetpack Compose?这个不重要,程序员也要学会跳出技术的视点从更微观的视点来考人生,人生短短数十载,珍惜当下,拥抱未来,跟上改变。
感谢
- 感谢Android不断迭代Jetpack Compose让咱们不断的继续卷
- 感谢Perfetto供给的辅佐脚本
- 感谢滴滴开源的APP研制帮手DoKit
- 感谢文心一言和ChatGPT的辅佐
- 感谢fundroid,古哥E下,FunnySaltyFish发布关于Jetpack Compose 1.5的介绍文章