Android App 启动时间
一、简介
启动时间同样也遵循2-5-8原则,所谓2-5-8原则就是当用户能够在2秒以内启动应用进入第一帧,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择退出这个app或者卸载该app。因此启动时间对用户的使用行为起到至关重要的作用。
二、测试点
- 冷启动:程序首次启动(进程首次创建并占用资源的过程)
- 热启动:应用程序在后台(back返回或home键退到后台)未被完全杀掉时再次启动应用的过程
- 应用界面切换(Activity)
三、测试方法
3.1 通过硬件进行测试
3.2 高速相机
采用录像的方法录制应用启动过程,然后通过人工数帧或者程序数帧的方式计算启动时间。
3.3 通过软件测试
1. 通过 logcat 中 ActivityManager 的相关数据获取,使用 DDMS 直接查看
这个信息在 Activity 窗口完成所有的启动之后,首次绘制的时候输出,也就是如果 activity 栈里有这个 Activity,再启动(如从多任务管理列表切回)则不会输出该信息。
log中的时间包括系统从开始处理启动Activity的时间到完成运行layout和draw函数的时间,不包括点击icon到系统接收到消息的时间。测试关注的其实是用户体验的启动时间,上面log不能满足我们的需求。
2. logcat 指令
启动应用后通过抓取 log 查看
- 抓取log后查看 :adb logcat -d -s ActivityManager|findstr "Displayed">D:\log.txt
- 在线查看: adb logcat -b events -s am_activity_launch_time
3. 通过 am 启动 Activity 查看启动时间
adb shell am start -W –n <packageName>/<activityName> 单位ms
如果只关心某个应用自身启动耗时,参考 TotalTime;如果关心系统启动应用总耗时,参考 WaitTime;如果关心应用有界面 Activity 启动耗时,参考 ThisTime。
4. 使用 screenrecord 命令
(1)adb shell screenrecord --bugreport /sdcard/launch.mp4
(2)启动app后,等待页面显示完成,结束录屏,拷贝到电脑使用能够逐帧查看的视频播放器播放(mac上quicktime就可以,win下可以用kmplayer),并按帧播放
5. 通过 ActivityManager 轮询实现获取启动时间
如何停止app?
1. adb shell am force-stop package (杀掉应用进程)
2. adb shell input keyevent 3 back返回退出应用
如何获取应用包名和activity名?
1. 有源码:打开源码在 AndroidManifest.xml 查看包名
2. 有安装包:aapt dump badging xx.apk
3. 已安装在手机:
(1)使用 adb logcat | grep START 命令启动应用查看
(2)pm list package 列出所有应用
(3)启动apk,使用 adb shell logcat | grep ActivityManager 查看
原文:https://www.cnblogs.com/sharef/p/13739702.html