Android APP性能指标(二)

文章目录

  • 一、响应时间
      • 1.1 数据获取
      • 1.2 响应时间指标测试点
      • 1.3 启动速度测试点
      • 1.4 响应时间测试解决方法
  • 二、流量
      • 2.1 数据获取
      • 2.2 流量测试关注点
      • 2.3 测试标准
  • 三、电量
      • 3.1 连接手机
      • 3.2 数据获取
      • 3.3 获取APP的UID
      • 3.3 重置电池数据收集数据
      • 3.4 电量指标测试
  • 四、温度
  • 五、性能测试常见问题

在上一篇Android APP性能指标(一)中我们对CPU、内存、FPS和GPU四个常关注的指标进行学习。

本文将从响应时间、电量、流量等指标来了解Android性能。

一、响应时间

响应时间是衡量操作的APP达到期望效果的时间范围。如果一个软件,加载数据一直加载不出来,会对软件的日活、留存产生影响。

  • 应用冷启动<=600ms为优秀,<=800ms为良好,<=1000ms为可接受
  • 应用热启动<=200ms为优秀,<=400ms为良好,<=600ms为可接受

1.1 数据获取

获取package和activity的方法:adb logcat | grep -i displayed(需操作APP)
在这里插入图片描述

方法一:adb 方法

  1. 冷启动,需要提前确认程序是否在后台跑,如有则需要先kill应用程序
  2. 获取应用首次启动时间:adb shell am start -W -S -n package/activity
  3. 获取应用二次启动时间:adb shell am start –W –n
  4. 停止APP命令:adb shell am force-stop package

在这里插入图片描述
(1)WaitTime 就是总的耗时,包括前一个应用 Activity pause 的时间和新应用启动的时间;TotalTime+系统资源启动时间
(2)TotalTime 表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用 Activity pause 的耗时。也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时

  使用am命令获取的时间只是apk从onCreate到onResume的时间,但不包含UI界面呈现出来的时间,所以考虑计算从am命令执行到logcat中有displayed出现的时候,视为app已经启动并展现,作为结束时间。此方法并不能完全计算出启动时间,有一定的误差。

方法二:使用charls 抓包,查看duration

在这里插入图片描述

1.2 响应时间指标测试点

  • 冷启动:应用首次启动所花费的时间
  • 热启动:应用非首次启动所花费的时间
  • 跳转:应用界面切换所花费的时间

1.3 启动速度测试点

  1. 冷启动速冻:首次启动app的时间间隔(只是启动时间,不包括页面加载)
  2. 热启动速度:非首次启动app的时间间隔(只是启动时间,不包括页面加载)
  3. 完全启动速度:从启动到首页完全加载出来的时间间隔
  4. 有网启动速度:从发起跳转,到页面完全加载出来的时间间隔
  5. 无网启动速度:从发起跳转,到页面完全加载出来的时间间隔

启动时间验收标准为 冷启动不超过1.5S,热启动不超过1S

1.4 响应时间测试解决方法

场景方法
获取单机事件触发到容器启动Native APP消耗的时间埋点
获取NativeAPP完全启动消耗时间查看system.log
获取Native调用PRC请求方法的延时时间埋点
获取RPC请求发出去过程中的具体数据埋点
获取RPC请求返回具体数据埋点
获取本地解析返回数据所消耗的时间埋点或者Traceview工具
获取界面渲染的时间慢速摄像机或埋点

二、流量

  如今,网络类型主要有2G、3G、4G、5G和WiFi,APP在使用不同网络时,我们要对其采取不同流量控制策略。如常用的视频APP,主要使用的网络类型为WiFi环境和蜂窝网络环境。

流量指标中涉及到的概念:

  • 中等负荷:应用正常操作
  • 高负荷:应用极限操作

2.1 数据获取

1、获取APP的PID:

  • 方法一:adb shell ps | grep 包名
    在这里插入图片描述
  • 方法二:adb shell dumpsys package 包名

2、获取流量数据命令:
adb shell cat /proc/获取的进程号PID/net/dev
在这里插入图片描述
注意:有些设备获取的流量数据有差异cat /proc/net/dev

3、tcpdump 抓包分析

  • 下载tcpdump工具,push到设备/data/local/tmp目录下

  • 在命令行中,输入tcpdump -v -i any -s 0 -c 2000 -w /文件地址
    在这里插入图片描述

  • tcpdump 工具命令参数说明
    -v/-vv/-vvv:,输出数据的详细程度,针对流量测试。
    -i:指定网卡(interface): any代表不限网卡
    -c: 指定接收包的数量,接收完成后自动停止抓包
    -s: 指每个包中最多截取的字节数,设置为0 时,为默认值262144

  • 使用Wirshark打开统计流量值,筛选ip.host=

2.2 流量测试关注点

  1. 应用首次启动流量值
  2. 应用后台持续运行时长2H的流量值
  3. 应用高负荷运行的流量峰值
  4. 应用中等负荷运行中的流量均值

2.3 测试标准

  • 不存在重复请求
  • 页面静默时或处于后台不应有流量增加
  • 缓存机制的逻辑合理
  • 在移动网络下不应自动下载素材等数据
  • 小缩略图小于5KB
  • 中缩略图小于25KB
  • 大缩略图小于50KB

三、电量

电量指标需要关注以下场景:

  1. 设备安装APK前后,待机功耗无明显差异
  2. 待机、操作页面、启动APK等常见操作,电量消耗均值正常
  3. 长时间使用APK,无异常耗电现象

  要通过adb命令来监控手机的耗电量,所以建议通过wifi的方式来连接手机,而不是用usb线来连接手机设备。usb方式连接手机会自动给手机充电,这样会影响对耗电量的统计的准确性。

3.1 连接手机

# 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个WiFi
# 先使用原装数据线把电脑与手机连接,手机在开发者选项中开启USB调试
# 使用adb devices命令查看是否与设备连接

$ adb devices
List of devices attached
86af3f27	device
# 显示device表示连接成功

# 断开数据线
$ adb connect 172.16.xxx.xxx:5555
unable to connect to 172.16.xxx.xxx:5555: Connection refused

# 输入 adb tcpip 5555命令
# 打印 “restarting in TCP mode port: 5555”表示启动成功

# 找到手机的 IP 地址
# 进入手机的WIFI连接,进入连接属性,查看手机的 IP
# 也可在「设置」-「关于手机」-「状态信息」-「IP地址」找到

# 输入adb connect '手机ip地址'
$ adb connect 172.16.xxx.xxx:5555
# 出现 connected to ip:5555 表示连接成功

3.2 数据获取

adb命令:adb shell dumpsys battery

Current Battery Service state:
  AC powered: false
  USB powered: true
  Wireless powered: false
  Max charging current: 500000    # 最大充电电流
  Max charging voltage: 5000000   # 最大充电电压
  Charge counter: 2449000
  status: 5               # 电池状态:2:充电状态 ,其他数字为非充电状态
  health: 2               # 电池健康状态:只有数字2表示good
  present: true           # 电池是否安装在机身
  level: 100              # 电量: 百分比
  scale: 100
  voltage: 4302           # 电池电压
  temperature: 385        # 电池温度,单位是0.1摄氏度
  technology: Li-poly     # 电池种类

3.3 获取APP的UID

adb shell COLUMNS=512 top
在这里插入图片描述
或者adb shell ps | grep 包名,Windows电脑将grep替换成findstr即可
在这里插入图片描述

3.3 重置电池数据收集数据

  • 清除已有的耗电量数据
    adb shell dumpsys batterystats --enable full-wake-history

  • 重置设备耗电量数据
    adb shell dumpsys batterystats --reset

  • 然后执行业务场景,测试完成之后再执行以下命令取出APP电量消耗日志(把数据重定向到本地)
    adb shell dumpsys batterystats > 文件地址

在文件中搜索 Estimated power use (mAh)即可跳转到App电量消耗位置:
在这里插入图片描述
之前获取的Uid值 u0_a1619 需要将下划线 _ 去掉变成 u0a1619 ,然后通过该Uid在日志文件中查找则可搜索到该APP对应的耗电量。

其中, Uid u0a1619:0.0978 中的 0.0978 为该APP在测试期间消耗的总电量,单位为 mAh ,圆括号中详细说明了电量消耗的详细信息。

3.4 电量指标测试

电量指标需要从软件和硬件两方面都要进行测试。

硬件端:需要硬件测试工程师使用万用表、功耗仪进行测试。满足市场行业标准

软件端:

  • 方式一:可以使用第三方工具进行测评
  • 方式二:命令端获取电量数据

四、温度

Android 设备运行过程中,设备温度异常不仅对用户体验带来不好影响,同时也存在安全方面隐患。

温度指标需要关注如下几个场景:

  1. 设备满负荷情况,设备温度峰值无异常
  2. 设备APK长时间播放,设备温度均值无异常
  3. 设备常规操作如点击、启动APK等温度正常

温度指标数据与电量指标获取方式都一样的

  • adb shell dumpsys battery
    在这里插入图片描述
  • temperature:温度(int类型),单位:0.1度

五、性能测试常见问题

在性能测试过程中,经常会遇到如下问题及原因:

问题原因
APP连接超时网络中断;APP 请求接口异常
APP 闪退Android缓存垃圾过多;运行程序多,导致内存不足等;版本兼容问题
卡顿、黑白屏系统CPU、GPU资源不够;过度绘制
崩溃APP常常表现为Crash
交互性能差其他APK、弹框干扰
内存泄漏APK新建的对象没有释放,导致内存一直被占用
内存溢出APK申请内存不够时

参考文档:https://juejin.cn/post/7068239461607276581#heading-5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/436475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pyaudio的安装以及报错解决

Pyaudio是一个可以用麦克风录入声音的库&#xff0c;但我在安装时发现无论是在cmd中pip安装还是在Pycharm中安装&#xff0c;都会报一堆错误。因此写一篇我最终的解决方案&#xff0c;我的解决办法是采用离线安装的方式&#xff0c;安装pyaudio库。 一.下载离线安装包 离线安…

超详细——动态内存分配+柔性数组

☃️个人主页&#xff1a;fighting小泽 &#x1f338;作者简介&#xff1a;目前正在学习C语言和数据结构 &#x1f33c;博客专栏&#xff1a;C语言学习 &#x1f3f5;️欢迎关注&#xff1a;评论&#x1f44a;&#x1f3fb;点赞&#x1f44d;&#x1f3fb;留言&#x1f4aa;&am…

意外之失:不小心删除的文件如何寻回?

一、瞬间消失的珍贵记忆 在我们的日常电脑使用中&#xff0c;总有一些时刻让人心惊胆战——那就是不小心删除了重要的文件。或许是一个珍藏多年的照片集&#xff0c;或许是一个即将完成的项目文档&#xff0c;这些文件承载着我们的回忆、努力和成果&#xff0c;却在一次疏忽之…

文本溢出隐藏 显示省略号,鼠标悬浮展示 el-tooltip(TooltipIsShowMixin封装)

目录 mixins 封装使用 TooltipIsShowMixin效果展示 mixins 封装 TooltipIsShowMixin.js export const TooltipIsShowMixin {data() {return {tooltipIsShow: false}},methods: {tooltipIsDisHandler(className) {this.$nextTick(() > {const dom document.querySelector…

m4a是什么文件格式?音质是无损吗?

m4a文件格式作为一种音频文件格式&#xff0c;源于MPEG-4标准的制定&#xff0c;该标准致力于提供高效的多媒体编解码方案。通常使用AAC编码&#xff0c;可以提供高质量的音频&#xff0c;但不是无损格式。AAC是一种有损压缩格式&#xff0c;它能够在减小文件大小的同时保持相对…

Jenkins 部署 RuoYi

目录 1、项目介绍 2、部署若依 clone 源代码 导入数据库到 node-16 修改 RuoYi 配置文件 推送 RuoYi 项目至 Gitlab 3、配置 Jenkins 配置本地 Maven Jenkins 配置 Maven 新建 Maven 项目 编写构建后的脚本 Jenkins 构建后执行脚本 4、Jenkins 传递参数 设置项目部…

Linux:kubernetes(k8s)探针的简介(7)

相当于我们用于监控容器的一个东西&#xff0c;通过给我们的不同探针来判断容器内的状态情况&#xff0c;实现故障的一个自动恢复。 我们在上一章的yaml文件中写入了一个这个东西 那么他什么情况下重启&#xff0c;就是通过探针进行一个监控&#xff0c;加入监控某一个端口&…

element多选框select下拉框数据回显的问题value.push is not a function

文章目录 问题描述 问题描述 今天在使用Element UI el-select组件遇到了一个问题&#xff0c;如下图&#xff1a; 下拉框里的值选中了&#xff0c;但是文本框里没有值 这是 el-select组件代码,我这里是用了一个多选框&#xff0c;options的值是在后端查询的&#xff0c;form.we…

利用MATLAB模拟点电荷的电场分布

一、实验目的&#xff1a; 1&#xff0e;熟悉点电荷的电场分布情况&#xff1b; 2&#xff0e;学会使用Matlab绘图&#xff1b; 二、实验内容&#xff1a; 1&#xff0e;根据库伦定律&#xff0c;利用Matlab强大的绘图功能画出单个点电荷的电场分布情况&#xff0c;包括电力…

虚拟化之内存(Memory)

一 内存的查看方式 free -k/m/h cat /proc/meminfodmesg |grep memory free命令的实质是根据meminfo中的文件来提取信息 二 内存虚拟化 1.概念&#xff1a;由于物理MMU只能通过Host机的物理地址进行寻址&#xff0c;所以实现内存虚拟化&#xff0c;关键是需要将Guest机的…

⭐每天一道leetcode:58.最后一个单词的长度(简单;istringstream;遍历查看)

⭐今日份题目 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例1 输入&#xff1a;s "Hello World" 输出&#xff1a…

Ubuntu将c++编译成.so文件并测试

一、准备cpp和h文件 创建test.cpp 在cpp中定义相加的函数funcAdd&#xff0c;给出函数的细节代码 #include <iostream> using namespace std;int funcAdd(int x, int y) {return xy; }创建test.h 在h中声明定义的函数&#xff0c;不需要任何细节 #ifndef __TEST__ #…

Catf1agCTF-Web通关合集

本文相关的ctf平台链接&#xff1a;Catf1agCTF - 综合训练平台 WEB签到 查看源代码 flag倒叙了&#xff0c;可以使用下面这个 文本字符串倒序在线工具(ESJSON在线工具) flag&#xff1a; catf1ag{welcome_to_catf1agctf_!!!_gogogo_!!!} flag在哪呢&#xff1f; 查看源代…

1、MQ_介绍、优缺点、类型等

MQ介绍 1. MQ概述 MQ&#xff08;Message Queue&#xff09;&#xff1a;消息队列&#xff0c;是基础数据结构中FIFO&#xff08;first in first out&#xff09;的一种数据结构。一般用来解决流量削峰、应用解耦、异步处理等问题&#xff0c;实现高性能&#xff0c;高可用&a…

Error:java:JDK isn‘t specified for module “模块名称“

可能是创建模块后不小心删掉了.idea.或.idea出错 只要删除.idea&#xff0c;close project出去&#xff0c;重新进让idea自动下载

FL Studio2024中文正式版水果编曲软件(支持苹果M1处理器)

FL Studio 2024是一款功能强大的数字音频工作站&#xff0c;它具有多种功能和特点&#xff0c;使得音乐制作变得更加简单、高效和有趣。 首先&#xff0c;它支持多轨录音和编辑&#xff0c;用户可以同时处理多个音频轨道&#xff0c;进行复杂的音乐编排和混音。此外&#xff0…

蜘蛛池是什么意思,怎么生成蜘蛛池

蜘蛛池是由自然界中的蜘蛛群落构成的一个小生态系统&#xff0c;也是身处自然界中的游客们可以在风雨中体验到最贴近自然气息的地方。 点开我主页面 Baidu蜘蛛的作用&#xff1a; 引蜘蛛逐渐收录&#xff0c;降权引蜘蛛可以疗伤&#xff0c;排名/收录不稳定&#xff0c;没有收…

基于springboot+vue的善筹网众筹网站

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Linux 开发工具 yum、git、gdb

目录 一、yum 1、软件包 2、rzsz 3、注意事项 4、查看软件包 5、安装软件 6、卸载软件 二、git操作 1、克隆三板斧 2、第一次使用会出现以下情况&#xff1a; 未配置用户名和邮箱&#xff1a; push后弹出提示 三、gdb使用 1、背景 2、使用方法 例一&#xff1a…