• APP——启动时间测试——adb命令


    1、概念:

    冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

    热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进                 程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

    首次启动:首次启动严格来说也是冷启动,之所以把首次启动单独列出来,一般来说,首次启动时间会比非首次启动要久,首次启动会做一些系统初始化工作,如缓存目录的生                    产,数据库的建立,SharedPreference的初始化,如果存在多 dex 和插件的情况下,首次启动会有一些特殊需要处理的逻辑,而且对启动速度有很大的影响,所以                     首 次启动的速度非常重要,毕竟影响用户对 App 的第一映像。

    2、am start -W packagename/activity 命令 (W大写)

    WaitTime:包括前一个应用 Activity pause 的时间和新应用启动的时间,稍微大点。


    TotalTime: 表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause的耗时(真正的启动耗时)

    ThisTime: 表示一连串启动 Activity 的最后一个 Activity 的启动耗时

     ===========================================================================================

    测试方法:adb shell am start -W packagename/MainActivity命令,计算启动时间

    --------------------------------------------------------------------------------------------------------------------------

    示例:

    adb    shell    am    start   -W    com.android.calculator2/com.android.calculator2.Calculator

    ThisTime:最后一个Activity启动耗时

    TotalTime:所有Activity启动耗时

    WaitTime:AMS启动Activity的总耗时

    总结:线下使用方便,不能带到线上

    不严谨、非精确地时间

    ===========================================================================

    关于ThisTime/TotalTime/WaitTime的区别,下面是其解释。WaitTime=endTime-startTime

    • startTime记录的刚准备调用startActivityAndWait()的时间点

    • endTime记录的是startActivityAndWait()函数调用返回的时间点

    • WaitTime = startActivityAndWait()调用耗时。

    WaitTime 就是总的耗时,包括前一个应用Activity pause 的时间和新应用启动的时间;

    ThisTime 表示一连串启动Activity 的最后一个 Activity 的启动耗时;

    TotalTime表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause 的耗时。

    也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时。

    总结一下,如果只关心某个应用自身启动耗时,参考TotalTime;

    如果关心系统启动应用耗时,参考WaitTime;

    如果关心应用有界面Activity启动耗时,参考ThisTime。

    =========================================================================================

    1.2、手动打点


    启动时埋点,启动结束时埋点,二者差值

    public class LaunchTimer {

    private static long sTime;

    public static void startRecord() {
    sTime = System.currentTimeMillis();
    }

    public static void endRecord() {
    endRecord("");
    }

    public static void endRecord(String msg) {
    long cost = System.currentTimeMillis() - sTime;
    LogUtils.e(msg + " cost " + cost + "ms");
    }

    }


    总结:精确,可带到线上,推荐使用

    避开误区,采用Feed第一条展示

    误区:onWindowFocusChanged只是activity的首帧绘制时间,APP启动的结束时间记在这里是不准确的。我们所要的时间,是用户真正看到整个界面的时间。

    正解:真实数据展示,Feed第一条展示(即adapter中的第一条数据)

  • 相关阅读:
    haproxy的使用
    zookeeper 的多线程和单线程库使用对比
    zookeeper 简介
    将博客搬至CSDN
    Sublime Text 添加eclipse快捷键
    Atom编辑器添加eclipse快捷键
    Linux安装mysql教程
    设计模式
    设计模式
    设计模式
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/13173035.html
Copyright © 2020-2023  润新知