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应用启动时间检测

    启动时间的测试方法 adb shell am start -W packagename/activity ddms...

  • Android冷启动优化

    1.冷启动时间检测 通过adb检测 运行结果分析 TotalTime:应用的启动时间,包括创建进程+Applica...

  • Android 6.0 权限机制等新特性

    1、电源管理 App Standby(应用待机) 检测:当设备未充电,且在这段时间內用户没有直接或者间接的启动该应...

  • 启动优化

    启动优化 启动时间 冷启动:App启动时,应用程序不在系统中,需要系统分配新的进程来启动应用热启动:App退回后台...

  • APP安全问题

    1.应用签名未校验风险:检测 App 程序启动时是否校验签名证书。 2.应用数据任意备份风险 Android 2....

  • IOS APP启动时间检测

    一:菜单:Product->Scheme->Edit Scheme->Environment Variables设...

  • Android性能优化第(九)篇---App启动速度优化之启动页

    在上篇文章Android性能优化第(八)篇---App启动速度优化之耗时检测处理说了应用启动的拦路虎在哪里,最后给...

  • uni-app第三节-整包升级方案

    应用更新检测 App启动时,向服务端上报当前版本号,服务端判断是否提示升级。在App.vue的onLaunch中,...

  • APP性能优化

    iOS APP性能优化 1:应用启动时间应用启动时,只加载启动相关的资源和必须在启动时加载的资源。 2:本地图片加...

  • 测试简书的代码框

    检测App是否第一次启动

网友评论

  • 张长长啊:这个是要root吗,为什么有的app打不开
    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.
  • c013c7ed7e21:D:\sdk\platform-tools>adb shell am start -W com.kanguo.hdb/ com.kanguo.hdb.activ
    ity.MainActivity
    运行之后弹出了提示”选择要使用的应用“,正常吗?还是说哪个地方需要改(如下图)


    选择要使用的应用:
    --------------------------
    360助手
    百度地图
    超级相册
    ***********
    **********
    -------------------
    始终 | 仅此一次
  • fadc8bbc797d:|shell@htc_a52dtul:/ $ am start -W com.fengger/com.fengger.activity.MainActivit
    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)
  • fadc8bbc797d:shell@HWTAG-L6753:/ $ am start -W com.fengger/.activity.MainActivity
    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:/ $
    fadc8bbc797d:@望月成三人 还是不行
    望月成三人:@cqschen
    am start -W com.fengger/ com.fengger.activity.MainActivity
  • fadc8bbc797d:那个main activity 是指的app 的首页还是那个splash activity 或是那个welcome activity?
    望月成三人:@cqschen activity请填绝对地址
  • fadc8bbc797d:我的也遇到了 ,怎么解决 :
    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)
    望月成三人:@cqschen w是大写
  • 景阳_jy:输入上述命令抛异常,错误如下:

    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)
    望月成三人:@faith_niuniu w改成大写

本文标题:app应用启动时间检测

本文链接:https://www.haomeiwen.com/subject/kcjudttx.html