app启动性能分析
app启动性能分析
app启动流程:
Application OnCreate
加载第三方SDK
Activity OnCreate
加载自身逻辑
发送远程数据请求 xxx.json
渲染界面List
app性能指标:
冷启动:系统没有该应用的进程,需要创建一个新的进程分配给应用,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。(建议时间5s)
暖启动:复用一些数据,再restart(建议时间2s)
热启动:从已有的进程中来启动,不会创建和初始化Application类,直接创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上(建议时间1.5s)
首屏启动:加载首屏广告的启动
测试主要流程:
adb logcat:只能计算首屏启动之前的时间,计算activtity,MainActivity加载的时间是多少
录屏+视频拆帧:最准确,但是需要人工分析,耗时长
uiautomator等自动化工具每隔200ms巡视界面变化
traceview:Android一个分析工具
硬埋点:要求开发人员在启动之前埋点,app启动之后结束埋点,然后把数据回传到服务器,最准确
用得最多的是 adb logcat + 录屏+视频拆帧
使用adb logcat
- package=com.xxx.android
- 清理缓存数据:adb shell pm clear $package
- 停止进程:adb shell am force-stop $package
- 启动app:adb shell am start -S -W $package/.view.WelcomeActivityAlias(-S等待app启动完成)
- 获取数据:adb logcat |grep -i displayed
adb logcat结果
startTime:记录刚准备调用startActivityAndWait()的时间点
endTime:记录startActivityAndWait()函数调用返回的时间点
WaitTime:startActivityAndWait()调用耗时,WaitTime=endTime-startTime
使用ffmpeg拆帧
- adb shell am force-stop $package
- adb shell screenrecord --bugreport --time-limit 30 /data/local/tmp/myapp.mp4 &
- adb shell am start -S -W $package/.view.WelcomeActivityAlias
- wait
- adb pull /data/local/tmp/myapp.mp4 (把视频拉到本地)
- ffmpeg -i myapp.mp4 myapp.gif
- ffmpeg -i myapp.mp4 -r 10 frames_%03d.jpg

浙公网安备 33010602011771号