美文网首页work
Android如何统计app应用启动时长?

Android如何统计app应用启动时长?

作者: 世道无情 | 来源:发表于2018-05-04 16:51 被阅读0次

    前言

    在我们开发过程中,随着产品功能的迭代, 使得App变得臃肿,启动速度会逐渐变慢,因此App性能的优化显得尤为重要,这一节不说App启动速度性能的优化,就只是记录一下App应用启动时长的统计

    1. App启动类型


    1>:冷启动

    • 定义:启动应用时,后台没有该进程,系统会重新创建一个新的进程给该应用。
    • 首先创建和初始化Application,然后创建和初始化MainActivity,最后显示在界面上。

    2>:热启动

    • 定义:从已有的进程启动应用,叫热启动。启动应用时,后台有该应用的进程(比如按下home键、back键,应用虽然退出,但是该应用的进程会保存在后台);
    • 热启动因为是从已有的进程中启动,所以不会执行 Application,而是直接执行MainActivity的逻辑,热启动不用创建和初始化Application,因为一个应用从进程的创建到销毁,Application只会初始化一次;

    3>:首次启动

    首次启动严格来说隶属于冷启动,这里之所以单独拎出来,是因为首次启动一般来讲会比非首次启动要久一些,因为首次启动会做一些系统的初始化工作,比如初始化数据库、初始化一些第三方的比如友盟、三方分享、登录、支付等等,当然可以把这些初始化工作可以放在IntentService中执行,所以首次启动速度非常重要。

    2. 本地启动统计时间


    本地启动统计相对来说比较简单,直接一句命令就ok:

    adb shell am start -w packagename/activity
    
    图片.png

    我们只需要关心TotalTime即可,因为这个是app启动真正的耗时时间

    3. 线上启动统计时间


    app上线之后不能依靠命令方式,可以通过打Log的方式来统计,两个地方,起始时间和结束时间,我们首先分析下app应用的启动流程:

    app应用从桌面启动流程如下:

    1>:用户点击桌面图标之后,会通知ActivityManagerService(AMS)启动应用入口的Activity;
    2>:如果AMS发现应用还没有启动,则会通知Zygote孵化出应用进程,然后在这个应用进程中执行ActivityThread的main()方法;
    3>:app应用进程然后通知 AMS说app应用进程语句启动,然后AMS会保存app应用进程的一个代理对象,如此一来 AMS可以通过控制这个代理对象来控制app的应用进程;
    4>:最后AMS通知app应用进程创建入口Activity实例,然后执行其生命周期的方法;

    生命周期方法执行流程

    上边说到,AMS可以通过代理对象通知应用进程创建入口Activity的实例,并从执行它的生命周期方法,app启动时间的统计或者app启动速度的优化也是从这里开始的,下边是MainActivity的启动流程:

    Application的构造方法
    Application.attachBaseContext()
    Application.onCreate()
    
    Activity的构造方法
    Activity.setTheme()
    Activity.onCreate()
    Activity.onStart()
    Activity.onResume()
    Activity.onAttachToWindow()
    Activity.onWindowFocusChanged()
    
    起始时间:
    • 冷启动:Application.attachBaseContext();
    • 热启动:Activity.onReStart();
    结束时间:

    Activity.onWindowFocusChanged()

    相关文章

      网友评论

        本文标题:Android如何统计app应用启动时长?

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