zoukankan      html  css  js  c++  java
  • Android App启动时间测量

    一、测量方式

      1. 使用AM服务启动App的第一个界面并输出应用启动时间。

        通过adb命令执行am命令启动App并出界应用启动时间。

        命令格式:

    adb shell am start -W packagename/packagename.首页Activity

      示例:

    adb shell am start -W com.example.demoapp/com.example.demoapp.MainActivity2

      结果:

    ➜  DemoApp adb shell am start -W com.example.demoapp/com.example.demoapp.MainActivity2
    Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.demoapp/.MainActivity2 }
    Status: ok
    Activity: com.example.demoapp/.MainActivity2
    ThisTime: 967
    TotalTime: 967
    WaitTime: 1011
    Complete

        ThisTime:最后启动的Activity的耗时。

        TotalTime:所有Activity启动耗时。

        WaitTime:是AMS启动Activity耗时。

        由于例子中只启动了一个Activity,所以ThisTime和TotalTime时间一致。

      使用adb shell am命令很方便的输出了应用启动时间及Activity启动耗时,但是,时间并不太精准。

      在实际场景也不会有应用去执行adb shell am命令收集指定应用的启动耗时。

      应用启动耗时统计从App启动到首页第一屏展示过程的时间,而不是单指应用首页Activity启动耗时。

      2. 手动打点

      需要明确应用启动到首页第一屏UI展示为结束的时间点计算为应用启动时间。

      从桌面launch触发应用启动到首页Activity展示,这个过程中哪些是应用中可以控制的,哪些是系统控制的。

      launch App -> AMS -> zygote -> create app process -> attachApplication -> bindApplication -> attachBaseContext -> create activity。 这个过程应用最早被调用的函数是Application.attachBaseContext()。

      应用启动时间从Application.attachBaseContext()函数中开始计时,一直到首页Activity第一屏UI展示结束,是应用启动的耗时。

      在网上大部分资源都是到首页Activity.onWindowFocusChanged(hasFocus: Boolean)函数,这个函数是Activity的首帧渲染时间,并不是首页第一屏展示时间。

  • 相关阅读:
    ST3 插件和技巧
    博客园中 代码使用 sublime-text 的主题
    JavaScript中的 prototype 和 constructor
    JavaScript 代码小片段
    JavaScript 静态方法和实例方法
    JavaScript 闭包的例子
    关于linux 交叉编译器的安装
    scrapy 实现mysql 数据保存
    django 实现 内网访问 和 用花生壳进行内网穿透
    django 中从外界借助多个网站时 static 的存放和整理
  • 原文地址:https://www.cnblogs.com/naray/p/15369364.html
Copyright © 2011-2022 走看看