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

下面是一个 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.mzph.cn/pingmian/37175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【内网安全】组策略同步-不出网隧道上线-TCP转ICMP

目录 域控-防火墙-组策略对象同步演示1、打开组策略管理&#xff0c;新建一个GPO连接 取名fhq(防火墙)2、编辑fhq并设置防火墙状态3、命令&#xff1a;gpupdate/force 更新策略4、域控主机新增规则5、域内用户主机更新规则 域控-防火墙-组策略不出网上线演示 ICMP协议上线&…

NAND闪存原厂铠侠加速推上市,预计10月完成IPO

NAND闪存原厂铠侠Kioxia拟趁着半导体市场回暖及企业财务状况显著提升的契机&#xff0c;加速推进其上市进程。 据报道&#xff0c;公司计划最快于8月底提交IPO申请&#xff0c;目标是在2024年10月末于东京证券交易所完成首次公开募股。此番上市动作不仅反映出市场复苏迹象&…

探索未来的AI革命:GPT-5的即将登场

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-40目标检测和边界框

40目标检测和边界框 import torch from PIL import Image import matplotlib.pylab as plt from d2l import torch as d2lplt.figure(catdog) img Image.open(../limuPytorch/images/catdog.jpg) plt.imshow(img) plt.show()# 边界框 #save def box_corner_to_center(boxes):…

【Matlab】-- 飞蛾扑火优化算法

文章目录 文章目录 01 飞蛾扑火算法介绍02 飞蛾扑火算法伪代码03 基于Matlab的部分飞蛾扑火MFO算法04 参考文献 01 飞蛾扑火算法介绍 飞蛾扑火算法&#xff08;Moth-Flame Optimization&#xff0c;MFO&#xff09;是一种基于自然界飞蛾行为的群体智能优化算法。该算法由 Sey…

center()方法——字符串居中填充

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 字符串对象的center()方法用于将字符串填充至指定长度&#xff0c;并将原字符串居中输出。center()方法的语法格式如下&#xff1a; str.…

校园圈子小程序系统搭建需求和需要哪些功能?APP小程序H5前后端源码交付

功能&#xff1a;小程序授权登陆&#xff0c;支持app双端&#xff0c;小程序&#xff0c;h5&#xff0c;pc端&#xff0c;手机号登陆&#xff0c;发帖&#xff0c;建圈子、发活动。可置顶推荐帖子&#xff0c;关注、粉 丝、点赞等。可作为圈子贴吧、小红书、校园社区、表白墙、…

CentOS停更无忧,中国操作系统闯入后CentOS时代

国际开源服务器操作系统CentOS停更&#xff0c;引发了中国操作系统火线进化——开源龙蜥操作系统社区涌现出大量的技术创新&#xff0c;相关创新技术迅速转化为商业化产品。2024年6月&#xff0c;浪潮信息与龙蜥社区联合发布服务器操作系统云峦KeyarchOS V5.8 新版本&#xff0…

抖音团购达人实战营,抖音团购达人从0-1教程(11节课)

课程目录&#xff1a; 1-团购达人先导课1.mp4 2-账号措建.mp4 2-账号搭建_1.mp4 3-开通团购达人_1.mp4 4-账号养号涨粉套路_1.mp4 5-团购选品正确姿势_1.mp4 6-短视频之混剪课_1.mp4 7-短视频之图文课_1.mp4 8-短视频之口播课_1.mp4 9-短视频运营策略_1.mp4 10-团购…

软开面试介绍模板

内容from 文心一言 在面试软件开发职位时&#xff0c;一个清晰、有条理的自我介绍是非常重要的。以下是一个自我介绍的大纲&#xff0c;你可以根据自己的经历和技能进行调整&#xff1a; 自我介绍大纲 基本信息 姓名教育背景&#xff08;学校、专业、毕业时间&#xff09;工作…

resample sensor

resample sensor 的一个问题。 背景: 项目要求&#xff0c;发送多个数据到 sensor-hal 上去&#xff0c;发现无论怎样&#xff0c;在 sensor-hal 上都 只有一个数据。 resample sensor 是重新采样&#xff0c;这个怎么理解的&#xff0c;我的理解是&#xff1a; 假设 sensor 采…

Electron录制应用-打包静态文件问题【命令行ffmpeg导不出视频】

问题描述 在开发环境下,所有功能都运行正常,但一旦进行打包并运行生产环境的版本,导出mp4视频的功能就失效了。没有文件生成,也没有任何错误提示。 排查问题 为了找到问题的根源,我首先决定通过日志来追踪。我使用了winston和winston-daily-rotate-file这两个强大的日志…

谷歌Gemma 2:开源模型的新里程碑

引言&#xff1a; 在人工智能领域&#xff0c;谷歌一直是创新的先行者。最近&#xff0c;谷歌DeepMind团队在I/O Connect大会上发布了Gemma 2&#xff0c;这是其开源模型系列的最新力作&#xff0c;标志着AI技术的又一大步。 Gemma 2的前身&#xff0c;Gemma&#xff0c;已经因…

IPython相关了解

一、什么是 IPython&#xff1f; 1.1 简单理解 IPython IPython 是一种增强的 Python 交互式解释器&#xff0c;它可以让你更方便地编写、调试和运行 Python 代码。你可以把它想象成一个比普通 Python 解释器更聪明、功能更丰富的工具&#xff0c;非常适合用来进行数据探索、…

Android 14 独立编译 Setting apk

我们在setting 目录下是用 mm 会报错。 所以应该在 源码主目录 采用 make Settings 进行编译 很多时候如果在apk 目录下 mm 单独编译会出错&#xff0c; 都可以才用这种方式进行编译。

MySQL高级-SQL优化- count 优化 - 尽量使用count(*)

文章目录 1、count 优化2、count的几种用法3、count(*)4、count(id)5、count(profession)6、count(null)7、 count(1) 1、count 优化 MyISAM引擎把一个表的总行数存在了磁盘上&#xff0c;因此执行count&#xff08;*&#xff09;的时候会直接返回这个数&#xff0c;效率很高&a…

Postman 接口测试 安装使用教程

1 下载官网:https://www.postman.com/downloads/ 2 方便下载,特提供百度云网盘: 链接&#xff1a;Postman 3 windows10 安装&#xff0c;点击安装包 #自动安装&#xff0c;并打开 4 举例&#xff0c;比如豆瓣&#xff0c;get 查询时间&#xff0c;图片登 5 举例&#xff0…

学懂C#编程:常用高级技术——学会C#多线程开发(三):学会线程池的使用

在C#中&#xff0c;线程池&#xff08;ThreadPool&#xff09;是一种用于管理线程的机制&#xff0c;它可以有效地重用线程&#xff0c;减少线程创建和销毁的开销&#xff0c;从而提高程序的性能。线程池通常用于执行不需要立即完成的任务&#xff0c;如后台任务、异步操作等。…

企业中对RAG的优化方案

企业中对RAG的优化方案 RAG优化&#xff1a;检索、语义和生成方面的提升RAG流程一、数据处理优化数据清洗实际案例 二、检索方面优化向量库检索倒排索引数据库检索 三、生成方面优化调整Prompt 四、架构优化RAGAgent架构Self-RAG架构Agentic RAG架构 总结 RAG优化&#xff1a;检…

Vue-cli搭建一个项目

目录 vue-cli搭建项目 主要的功能 需要的环境 用 HbuilderX 搭建 vue-cli 项目 1、创建一个vue项目(2.6.10) 2、组件路由 首先&#xff1a;安装 其次&#xff1a; 1.在src文件夹下创建router目录,创建index.js 2.使用路由——在App.vue中添加路由视图 3.在main.js 中…