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

  • 相关阅读:
    无重复字符的最长子串
    最长公共前缀
    项目开发的 工程化
    包管理 import debug 模块管理 module
    Third Party Browser Drivers NOT DEVELOPED by seleniumhq
    任何不看源码的代码引入都是存在定时爆炸的可能
    博客数计数
    lineage 世系 血缘 容错机制 DAG
    查源码分析 游标 写 需要 cursors 一切不看源码的代码引入都是定时炸弹的启动
    8核 16g 及时释放内存空间
  • 原文地址:https://www.cnblogs.com/naray/p/15369364.html
Copyright © 2020-2023  润新知