冷启动是Android性能测试中的重要指标,即应用从进程未创建到完全启动的时间,一般要求时长<1.5s,过长需要考虑优化。
获取冷启动时间的方法:
1.用命令行
adb shell am start -W packagename/activity
如果懒得找包名和activity名称,则直接打命令
logcat -b events -s am_activity_launch_time
然后在结果中拷贝出来就可以了。
adb shell am start -w的输出结果有三个值,thisTime,totalTime,waitTime.
thisTime(最后一个activity启动耗费时间)=curTime-displayStartTime(一连串启动Activity中的最后一个Activity的启动时间点)
totalTime=mlaunchStartTime(一连串页面中第一个activity启动时间,可能无界面)!=0?curTime-mlaunchStartTime:thisTime
waitTime=endTime(系统调用startActivityAndWait完成时间点)-startTime(系统调用startActivityAndWait开始时间点)
也可以说:
waitTime=initTime(系统初始化的一些工作,ActivityManagerService创建ActivityRecord记录块和选择合理的Task、将当前Resume的Activity进行pause)+totalTime
也就是说应用启动总耗时应该是waitTime,但是initTime这个时间段内我们没有太多优化空间,所以我们可能更关注totalTime
2.更精细的时间分析可以用systrace
a:找到AndroidStudio安装目录下的systrace目录,比如我的目录就是Library/Android/sdk/platform-tools/systrace
b:杀掉应用并运行systrace目录下的systrace.py文件
python systrace.py --app=packagename -b 40960 (其中packagename要替换成自己的包名)
c.在systrace目录下会生成一个文件trace.html
d.打开浏览器,访问chrome://tracing/ 因为我用的是Chrome浏览器,在打开的页面中选择Load前面生成的trace.html文件就可以了。
e.在运行结果中ui Thread对应的地方就可以找到bindApplication,这里就有详细的启动耗时信息。