• 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的首帧渲染时间,并不是首页第一屏展示时间。

  • 相关阅读:
    十四行诗 Sonnet 15
    P3386 【模板】二分图匹配
    20171105模拟题
    需要注意的各种各种 持续更新
    P1315 观光公交 贪心
    【搬家辣】
    【洛谷P2387】魔法森林
    【洛谷P3369】普通平衡树(splay)
    【算法详解】splay的初步了解
    研究性学习代码
  • 原文地址:https://www.cnblogs.com/naray/p/15369364.html
Copyright © 2020-2023  润新知