性能指标
安装耗时
pm install命令前后的时间差
启动耗时:冷启动耗时、热启动耗时
adb shell am start -W 包名/启动页xxxActivity
>adb shell am start -W 包名/绝对路径.WelcomeActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=路径.WelcomeActivity }
Status: ok // 状态
LaunchState: COLD //COLD(冷启动)/HOT(热启动)
Activity: 路径.WelcomeActivity
ThisTime:971 // 最后一个启动的Activity的启动耗时
TotalTime: 1666 // 应用的启动时间,包括创建进程 + Application初始化 + Activity初始化到界面显示的过程。
WaitTime: 1671 // AMS(ActivityManagerService )启动Activity的总耗时
Complete
崩溃率:Java崩溃、native崩溃
java崩溃:通过系统提供的回调接口进行监控:UncaughtExceptionHandler.uncaughtException
native崩溃:google breakpad
ANR
ANR主要分为三种类型:
- KeyDispatchTimeout(5 seconds) --主要类型
按键或触摸事件在特定时间内无响应 - BroadcastTimeout(10 seconds)
BroadcastReceiver在特定时间内无法处理完成 - ServiceTimeout(20 seconds) --小概率类型
Service在特定的时间内无法处理完成
可通过如下的方式进行监测
- ANR发生时,没有java的回调,但是会写进程信息到 /data/anr/traces.txt文件,可以用FileObserver来观测 /data/anr/的写入情况来判断是否发生了ANR。
- 参考Android WatchDog机制,起一个单独的线程进行监测。
首屏时间
- 代码注入的方式,在关键节点进行埋点,比如Activity启动时长、Fragment启动时长等;
- 通过图像识别,监控白屏时间,知乎启动时间录屏自动化测试
接口响应时长
接口请求前后的时间差
帧率(FPS)
- Janky frames
Janky frames标识本地统计的数据中,卡顿的次数及概率。
adb shell dumpsys gfxinfo < 包名 >
打印信息:
Stats since: 133740375229592ns
Total frames rendered: 1833
Janky frames: 114 (6.22%)
50th percentile: 9ms
90th percentile: 13ms
95th percentile: 19ms
99th percentile: 65ms
Number Missed Vsync: 20
Number High input latency: 1624
Number Slow UI thread: 37
Number Slow bitmap uploads: 3
Number Slow issue draw commands: 16
Number Frame deadline missed: 49
HISTOGRAM: 5ms=149 6ms=129 7ms=180 8ms=270 9ms=323 10ms=259 11ms=178 12ms=109 13ms=54 14ms=34 15ms=22 16ms=14 17ms=11 18ms=9 19ms=10 20ms=8 21ms=6 22ms=4 23ms=6
- Choreographer.FrameCallback
Choreographer的FrameCallback接口在每一帧被绘制的时候被调用,根据这样一个原理,可以通过代码注入,监控FrameCallback两次回调之间的时间间隔,时间间隔超过16ms则丢帧
网友评论