第一步:杀掉App,然后重启,过滤Displayed日志,找到App启动的第一个Activity;
adb logcat | grep Displayed
第二步:再次杀掉App,使用adb shell am start命令来启动app:
adb shell am start -S -W com.ss.android.article.news/.activity.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN
说明:
- com.ss.android.article.news/.activity.MainActivity就是我们在第一步得到的App冷启动的第一个Activity;
- -S参数:强制重启,如果没有-S参数,当MainActivity已启动时,就不会重启MainActivity;
- -W参数:列出启动过程中统计到的具体数据;
-
-c 和 -a 为可选参数,可让您为 intent 指定 <category> 和 <action>。
得到的结果如下:
- LaunchState表示冷、热、温启动;
- TotalTime表示新应用启动的耗时,包括新进程的启动和Activity的启动耗时(包括创建进程 + Application初始化 + Activity初始化到界面显示的时间),但不包括前一个应用Activity pause的耗时;
- WaitTime就是总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间;因此,WaitTime比TotalTime稍大;
- 开发者一般只要关心TotalTime即可,这个时间才是自己应用真正启动的耗时。上面今日头条的冷启动耗时是574ms。
- 为了得到的结果更准确,可以写一个脚本重复执行am start命令,计算平均值;