使用 shell 脚本 统计app冷启动耗时

ops/2024/10/9 15:17:24/

下面是一个 shell 脚本,它使用 参数将包名称作为参数--app,识别相应应用程序进程的 PID,使用 终止该进程adb shell kill,最后使用 重新启动该应用程序adb shell am start

#!/bin/bash# Check if package name is provided
if [ -z "$1" ]; thenecho "Usage: $0 --app=<package_name>"exit 1
fi# Extract package name from argument
package_name=$(echo $1 | cut -d '=' -f 2)# Check if package name is valid
if [ -z "$package_name" ]; thenecho "Invalid package name: $package_name"exit 1
fi# Get PID of the app process
pid=$(adb shell ps | grep "$package_name" | grep -v "grep" | awk '{print $2}')# Kill the app process if it's running
if [ -n "$pid" ]; thenecho "Killing process with PID $pid for package $package_name"adb shell kill $pid# Introduce a 3-second delayecho "Waiting for 3 seconds..."sleep 3
elseecho "App with package $package_name not running"
fi# Restart the app
echo "Restarting app with package $package_name"
adb shell am start -W $package_name

解释:

  1. 检查包名称参数: 脚本首先检查是否--app提供了参数以及是否包含包名称。如果没有,它会显示错误消息并退出。
  2. 提取包名称: 如果提供了包名称,则使用命令从参数中提取包名称cut
  3. 检查包名有效性: 检查提取的包名是否为空。如果是,则显示错误消息并退出。
  4. 获取PID: 使用adb shell ps | grep "$package_name" | grep -v "grep" | awk '{print $2}'命令检索与指定包名关联的应用程序进程的PID。
  5. 终止进程: 如果找到 PID,则表示应用程序正在运行。然后执行adb shell kill $pid命令以终止应用程序进程。
  6. 引入睡眠命令: 在该adb shell kill $pid命令之后,脚本现在包含该sleep 3命令。该命令暂停脚本的执行 3 秒。
  7. 重启应用程序: 无论应用程序是否正在运行,它都会执行adb shell am start -W $package_name重启应用程序的命令。

要使用脚本:

  1. **保存脚本:**将脚本保存为.sh文件,例如。 kill_and_restart_app.sh
  2. **使脚本可执行:**使用命令使脚本可执行chmod +x kill_and_restart_app.sh
  3. **运行脚本:**使用以下语法从命令行运行脚本:
./kill_and_restart_app.sh --app=com.your.app.package.name

将其替换com.your.app.package.name为您要终止并重新启动的应用程序的实际包名称。

  1. LaunchState表示冷、热、温启动;
  2. TotalTime表示新应用启动的耗时,包括新进程的启动和Activity的启动耗时(包括创建进程 + Application初始化 + Activity初始化到界面显示的时间),但不包括前一个应用Activity pause的耗时;
  3. WaitTime就是总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间;因此,WaitTime比TotalTime稍大;

开发者一般只要关心TotalTime即可,这个时间才是自己应用真正启动的耗时。为了得到的结果更准确,可以写一个脚本重复执行am start命令,计算平均值。


http://www.ppmy.cn/ops/53281.html

相关文章

量子计算对2024年网络安全的冲击与应对

《量子计算对2024年网络安全的冲击与应对》 引言 量子计算以其惊人的计算能力&#xff0c;被誉为信息技术的下一个革命。然而&#xff0c;这种强大的计算力也给现有的网络安全体系带来了前所未有的冲击。本文将深入探讨量子计算对2024年网络安全的影响&#xff0c;并提出相应…

四、golang基础之defer

文章目录 一、定义二、作用三、结果四、recover错误拦截 一、定义 defer语句被用于预定对一个函数的调用。可以把这类被defer语句调用的函数称为延迟函数。 二、作用 释放占用的资源捕捉处理异常输出日志 三、结果 如果一个函数中有多个defer语句&#xff0c;它们会以LIFO…

气膜游泳馆造价多少钱—轻空间

随着人们对健康生活的追求和休闲娱乐需求的增加&#xff0c;游泳馆逐渐成为城市建设中的重要设施之一。气膜游泳馆作为一种新型建筑形式&#xff0c;凭借其快速施工、节能环保、经济实用等优点&#xff0c;受到广泛关注和应用。轻空间将详细探讨气膜游泳馆的造价构成及其影响因…

基于SaaS平台的iHRM管理系统测试学习

目录 目录 1、登录模块 2、员工管理模块 3、Postmannewman软件的安装&#xff0c;学习 1、Postman的使用 2、Postman断言 3、全局变量和环境变量 4、请求时间戳 5、Postman关联 6、批量执行测试用例 7、Postman生成测试报告 8、Postman读取外部数据文件&#xff08…

使用鸿蒙HarmonyOs NEXT 开发 快速开发 简单的购物车页面

目录 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 2.源码&#xff1a; 资源准备&#xff1a;需要准备三张照片&#xff1a;商品图、向下图标、金钱图标 1.显示效果&#xff1a; 定义了一个购物车页面的布局&#x…

麒麟系统设置jar开机自启动自定义服务

项目场景&#xff1a; 在信创项目中&#xff0c;麒麟操作系统(兆芯)客户端访问web端程序时&#xff0c;PC机器上需要安装读卡器读卡服务&#xff08;自定义服务&#xff09;才能读取身份证/卡片信息&#xff0c;并开机自启动。 解决方案&#xff1a; /usr/local/custom-server目…

React 组件 API

React 组件 API React 组件 API 是 React 应用程序开发中的核心部分,它提供了一系列的接口和方法,使得开发者能够创建和管理组件的状态、属性以及生命周期。在本篇文章中,我们将深入探讨 React 组件 API 的各个方面,包括组件的定义、状态管理、属性传递、事件处理以及组件…

【深度学习】图形模型基础(1):使用潜在变量模型进行数据分析的box循环

1.绪论 探索数据背后的隐藏规律&#xff0c;这不仅是数据分析的艺术&#xff0c;更是概率模型展现其威力的舞台。在这一过程中&#xff0c;潜在变量模型尤为关键&#xff0c;它成为了数据驱动问题解决的核心引擎。潜在变量模型的基本理念在于&#xff0c;那些看似复杂、杂乱无…