声明:本文是《Android 性能优化入门与实战》——张世欣著 的笔记
为什么要做启动优化
App 启动耗时每减少 1s,用户流失率降低 6.9%
启动监控
1 | 补充知识 |
监控数据设计
需要比较的对照组:
- 旧版本-新版本
- 冷启动-温启动-热启动
数据与目的:
- 获取总耗时,判断新版本更快还是更慢
- 获取各区间耗时,具体分析耗时到具体区间
App 启动代码顺序
1 | Application 构造函数 |
获取启动各阶段耗时
方法:
- 手动埋点
- 编译时 AOP
获取启动性能数据
1 | 分析 App 启动慢的几个重要指标 |
线下分析
Logcat 或者 adb logcat 中查看关键字 Displayed 相关日志
自动执行 App的启动并获取启动耗时:通过 adb shell am start 实现多次自动启动 App 并获取第一次的启动耗时:
1 | adb shell am start -S -W -R -3 com.antfortune.wealth/com.alipay.mobile.quinox.LauncherActivity |
am start
是 ActivityManagerService 提供的命令,用来启动 Activity。- S
即 Stop,表示在每次启动前,先强制停止 App 运行,以实现冷启动。- W
即 Wait,表示执行后等待启动完成再退出,以统计整个启动的耗时。- R
即 Repeat, 表示重复执行启动的次数,-R 3
表示重复启动 3 次。
会得到以下信息
1 | Stopping: com.antfortune.wealth |
上述 TotalTime 就是整个冷启动的耗时,与 Locat 过滤 Displayed 得到的时间基本是一致的。
这两种方式,统计的都是 App 启动到 Activity 首次调用的时间 onWindowFocusChanged 的时间。
如果想统计从 App 启动到数据请求成功后某个布局完全展示出来的耗时,可以在启动终点调用 Activity#reportFullyDrawn 来通知当前
已经完全绘制完成,然后在 Logcat 里过滤 Fully drawn 就可以看到整个流程的耗时。