app应用启动时间检测
作者:
望月成三人 | 来源:发表于
2016-06-14 15:48 被阅读1975次
启动时间的测试方法
- adb shell am start -W packagename/activity
- ddms adb logcat监控
ddms adb logcat
- 创建过滤条件如下:
- Fliter Name:Display
- By Log Tag:ActivityManager
Paste_Image.png
- 启动应用,查看DDMS打印的Display消息,根据应用名称记录启动时间数据。计算从点击应用到应用显示主页的的时间差。如下图所示,红线对应的时间即为该次启动时间。(有些应用启动会经历2个阶段,如连接服务器和进入主页,启动时间为累加2个display打印的时间值)
Log信息样例如截图:
Paste_Image.png
应用启动场景分析
应用第一次启动-冷启动
- 也就是我们常说的冷启动,这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity.
- 这时候adb shell am start -W packagename/MainActivity 返回的结果,就是标准的应用程序的启动时间(注意 Android 5.0 之前的手机是没有 WaitTime 这个值的):
adb shell am start -W com.media.painter/com.media.painter.PainterMainActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.media.painter/.PainterMainActivity }
Status: ok
Activity: com.media.painter/.PainterMainActivity
ThisTime: 355
TotalTime: 355
WaitTime: 365
Complete
- 如果只关心某个应用自身启动耗时,参考TotalTime;
- 如果关心系统启动应用耗时,参考WaitTime;
- 如果关心应用有界面Activity启动耗时,参考ThisTime。
应用非第一次启动-热启动
- 如果是你按Back键,并没有将应用进程杀掉的话,那么执行上述命令就会快一些,因为不用创建进程了,只需要启动一个Activity即可。这也就是我们说的应用热启动。
参考更详细的资料
本文标题:app应用启动时间检测
本文链接:https://www.haomeiwen.com/subject/kcjudttx.html
网友评论
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]
cmp=com.dianping.v1/.activity.MainActivity }
Error type 3
Error: Activity class {com.dianping.v1/com.dianping.v1.activity.MainActivity} does not ex
ist.
ity.MainActivity
运行之后弹出了提示”选择要使用的应用“,正常吗?还是说哪个地方需要改(如下图)
选择要使用的应用:
--------------------------
360助手
百度地图
超级相册
***********
**********
-------------------
始终 | 仅此一次
y
m start -W com.fengger/com.fengger.activity.MainActivity <
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.L
AUNCHER] cmp=com.fengger/.activity.MainActivity }
java.lang.SecurityException: Permission Denial: starting Intent { act=android.in
tent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.f
engger/.activity.MainActivity } from null (pid=321, uid=2000) not exported from
uid 10231
at android.os.Parcel.readException(Parcel.java:1549)
at android.os.Parcel.readException(Parcel.java:1502)
at android.app.ActivityManagerProxy.startActivityAndWait(ActivityManager
Native.java:2568)
at com.android.commands.am.Am.runStart(Am.java:736)
at com.android.commands.am.Am.onRun(Am.java:304)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
at com.android.commands.am.Am.main(Am.java:99)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:288)
am start -W com.fengger/.activity.MainActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.
AUNCHER] cmp=com.fengger/.activity.MainActivity }
java.lang.SecurityException: Permission Denial: starting Intent { act=android.i
tent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.
engger/.activity.MainActivity } from null (pid=11208, uid=2000) not exported fr
m uid 10271
at android.os.Parcel.readException(Parcel.java:1546)
at android.os.Parcel.readException(Parcel.java:1499)
at android.app.ActivityManagerProxy.startActivityAndWait(ActivityManage
Native.java:2632)
at com.android.commands.am.Am.runStart(Am.java:762)
at com.android.commands.am.Am.onRun(Am.java:305)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
at com.android.commands.am.Am.main(Am.java:97)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:250)
1|shell@HWTAG-L6753:/ $
am start -W com.fengger/ com.fengger.activity.MainActivity
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getType()' on a null object reference
at com.android.commands.am.Am.runStart(Am.java:810)
at com.android.commands.am.Am.onRun(Am.java:359)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
at com.android.commands.am.Am.main(Am.java:100)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:251)
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getType()' on a null object reference
at com.android.commands.am.Am.runStart(Am.java:810)
at com.android.commands.am.Am.onRun(Am.java:359)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
at com.android.commands.am.Am.main(Am.java:100)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:251)