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中的第一条数据)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用adb命令可以测试安卓应用程序的性能。通过运行adb命令,可以获取应用程序的性能数据,并将其保存在csv文件中。这些性能数据包括均值、最大值和最小值等指标。可以使用adb命令测试应用程序的启动时间、流量消耗和电量消耗等性能指标。 对于启动时间测试,可以使用adb shell am start -W package命令来测试应用程序的热启动和冷启动时间。其中WaitTime参数表示启动时间。 对于流量的测试,可以使用adb shell命令来查看应用程序的进程ID(pid)和用户ID(uid),然后使用cat /proc/uid_stat/uid/tcp_rcv(tcp_snd)命令来获取发送和接收的流量数据。测试前获取流量数值,测试后再次获取,两者的差值就是应用程序消耗的流量。 对于电量的测试,可以使用adb shell dumpsys batterystats > battery.txt命令来获取电量使用情况。在生成的battery.txt文件中,可以查找关键词"Estimated power use"下的具体uid的耗电情况。 总之,通过adb命令可以方便地测试安卓应用程序的性能,包括启动时间、流量消耗和电量消耗等指标。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [可测含多进程的app-- python调用adb命令获取Android App应用的性能数据:CPU、GPU、内存、电池、耗电量(含...](https://blog.csdn.net/u012089395/article/details/126668946)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [android开发获取应用本身耗电量_APP性能测试——Android](https://blog.csdn.net/weixin_39834780/article/details/110200499)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值