app 启动性能分析
一、activity的启动流程
1、唤醒APP
2、启动一个空白窗口,这个窗口什么都不做
3、启动一个线程
4、启动一个object,即调用Application OnCrete
5、创建主线程,即MainTread,用于初始化mainActivity,渲染和数据初始化。渲染完成后,即DisplayedTime时,将空白窗口对调
6、页面已经显示,但是没有加载完成,动态加载。
简单概括就是:Application OnCrete:加载第三方的SDK
Activity OnCrete:
- 加载自身的逻辑
- 发送远程数据请求,XXX.json
- 渲染页面list
二、app性能指标
- 冷启动 最重要 不超过5S
- 暖启动 不超过2S
- 热启动 不超过1.5S
- 首屏启动
三、主要流程
- adb logcat
- 录屏+视频拆帧
- UIautomator等自动化工具200ms巡检界面变化
- traceView
- 硬埋点
四、使用adb logcat
package = XX
清除缓存数据:adb shell pm clear $package
停止进程:adb shell am force-stop $package
启动APP:adb shell am start -S -W $package/.mainActivity
获取数据: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/record.mp4 &
- adb shell am start -S -W $package/.mainActivity
- wait
- adb pull /data/local/tmp/record.mp4 .
- ffmpeg -i record.mp4 record.gif
- ffmpeg -i record.mp4 -r 10 frames_%03d.jpg