每个Android开发都应需知的性能指标~
无论你是发布一个新的 Android 应用,还是希望提高现有应用的性能,你都可以使用 Android 应用性能指标来帮助你。
在这篇文章中,我将解释什么是 Android 应用性能指标,并列出8个需要考虑跟踪的维度和建议的基线。
什么是 Android 应用性能指标?
Android 应用性能指标量化了一个 Android 应用的性能。开发人员通过建立自己的跟踪系统或将应用程序连接到第三方平台来收集这些数据。无论采用何种收集方法,性能指标都能表明一些关键信息,如应用程序的运行效率以及用户对界面的反应。有了这些信息,开发者可以解决错误并作出调整,以改善整体用户体验。
为什么 Android 应用性能指标很重要?
Android 应用性能指标很重要,因为它们可以帮助开发者确定其产品的有效性。通过比较实际数据和期望,开发者可以重新评估他们的期望或对应用程序进行调整。
这些指标也可以帮助企业:
- 创造更好的用户体验
- 促进更好的品牌忠诚度
- 指导开发吸引大众市场的新应用
- 在其行业内保持竞争力
8个 Android 应用性能指标
1. 应用启动时间
从用户点击应用图标启动应用到看到第一页的时间
基线
冷启动时间 P50<2sP_{50} < 2sP50<2s
Pk表示第k百分位数P_k表示第k百分位数Pk表示第k百分位数
百分位数(Percentile)是统计学术语,若将一组数据从小到大排序,并计算相应的累计百分点,则某百分点所对应数据的值,就称为这百分点的百分位数
应用程序的启动可以在三种状态下进行,每种状态都会影响你的应用程序对用户可见的时间:冷启动、温启动和热启动。在冷启动中,你的应用程序从头开始。在其他状态下,系统需要将运行中的应用从后台带到前台。
Android使用初始显示时间(TTID)和完全显示时间(TTFD)指标来优化冷启动和温启动的应用程序。Android 运行时 (ART) 使用这些指标的数据来高效地预编译代码,以优化未来启动。
2. 冻结帧(Frozen Frame)
冻结帧是指渲染时间超过700ms的界面帧。
这意味着你的应用在帧的呈现过程中几乎有一秒钟的时间卡住不动,对用户输入无响应。我们通常建议应用在 16ms 内呈现帧,以确保界面流畅。但是,当应用启动或转换到其他屏幕时,初始帧的绘制时间通常会超过 16ms,这是因为应用必须扩充视图,对屏幕进行布局并从头开始执行初始绘制。因此,Android 将冻结帧(frozen frame)与呈现速度缓慢(slow rendering)分开跟踪。建议应用中的任何帧的呈现时间都不应超过 700ms。
基线
冻结帧的百分比应该小于1%。
3. 界面呈现缓慢(Slow Rendering)
应用程序渲染的帧数超过16ms(低于60fps),系统就会被迫跳帧,用户就会感觉到应用程序的卡顿。
基线
慢速帧的百分比应低于5%。
界面呈现是指从应用生成帧并将其显示在屏幕上的动作。如需确保用户能够流畅地与您的应用互动,您的应用呈现每帧的时间不应超过 16ms,以达到每秒 60 帧的呈现速度。如果应用存在界面呈现缓慢的问题,系统会不得不跳过一些帧,这会导致用户感觉到应用不流畅,这种情况称为卡顿(jank)。这个16ms的数字来自于手机的硬件,它定义了屏幕在一秒钟内可以更新的速度。现在大多数设备以60赫兹的速度更新,这意味着你有16ms的时间来执行每一帧的所有逻辑。如果错过了这个时间窗口,就会得到一个丢帧。
4. 应用程序无响应(Application No Responseding)
当UI线程被阻塞超过5秒时,会触发应用程序无响应(ANR)错误。
基线
- 日活中出现一次ANR的比例应该小于0.47%。
- 日活中出现两次或更少的ANR的比例应该小于0.24%。
日活指的是一日内登录或使用应用程序的用户数。
如果 Android 应用的界面线程处于阻塞状态的时间过长,会触发“应用无响应”(ANR) 错误。如果应用位于前台,系统会向用户显示一个对话框,如下所示。ANR 对话框会为用户提供强制退出应用的选项。
5. 崩溃(Crash)
只要出现未处理的异常或信号导致的意外退出,Android应用就会崩溃。
基线
没有出现崩溃的比例应该大于99.95%
使用 Java 或 Kotlin 编写的应用会在抛出未处理的异常(由 Throwable
类表示)时崩溃。使用机器码或 C++ 语言编写的应用会在执行过程中遇到未处理的信号(如 SIGSEGV
)时崩溃。
当应用崩溃时,Android 会终止应用的进程并显示一个对话框,告知用户应用已停止,如下图所示。
6. 内存消耗(Memory Consumption)
应用程序当前使用的物理内存的大小。
基线
如果 Android 应用程序消耗过多的内存,在运行时可能无法在内存中分配一个对象,就会抛出一个 OutOfMemoryError
,导致应用突然崩溃,并显示应用程序 "已经停止 "的通知,创造一个糟糕的用户体验。
7. CPU 利用率(CPU percent utilization)
应用在运行时耗费的CPU处理能力的百分比
基线
CPU 利用率是用来量化处理器在应用程序之间的共享情况。单个应用程序的高 CPU 利用率可能表明它对处理能力的要求很高,或者它可能出现故障并影响你的用户设备的电池寿命。
8. 网络响应时间(Network Response Time)
响应时间是指服务器响应客户的请求所需的时间。计时器以毫秒为单位,从客户发出请求的那一刻开始,到服务器发回第一个响应时停止。
基线
P90<1sP_{90} < 1sP90<1s
Pk表示第k百分位数P_k表示第k百分位数Pk表示第k百分位数
百分位数(Percentile)是统计学术语,若将一组数据从小到大排序,并计算相应的累计百分点,则某百分点所对应数据的值,就称为这百分点的百分位数
响应时间有时被定义为第一个字节的时间(TTFB),它是指从客户端请求到第一个数据包被发回给客户端的时间。响应时间不包括客户的设备渲染或处理任何收到的数据所需的时间。
总结
上述中的是对Android APP性能调优优化各方向的简单介绍,其实面试能问道的性能优化相关知识点也就这么多,只是每个人回答的方式不同而已,最终的结果怎么样,还得看面试官怎么理解吧。如果想彻底搞懂这块知识点的话,可以去参考学习《Android 性能调优学习手册》:https://qr18.cn/FVlo89
,可以说里面记录比较详细比较全了。
《Android 性能调优学习手册》:https://qr18.cn/FVlo89
1.内存优化
2.UI优化及渲染优化
3.电量优化
4.网络优化
5.Bitmap优化
6.图片压缩优化
7.多线程并发优化
8.数据传输效率优化
9.启动优化
10.卡顿优化
11.安装包优化
相关文章:

每个Android开发都应需知的性能指标~
无论你是发布一个新的 Android 应用,还是希望提高现有应用的性能,你都可以使用 Android 应用性能指标来帮助你。 在这篇文章中,我将解释什么是 Android 应用性能指标,并列出8个需要考虑跟踪的维度和建议的基线。 什么是 Android…...

MSYS2安装
最近在学习windows上编译FFmpeg,需要用到msys2,在此记录一下安装和配置过程。 点击如下链接,下载安装包: Index of /msys2/distrib/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我下载的是:ms…...
3/3考试总结
时间安排 7:30–7:50 看题,怎么感觉三道构造,T3 貌似有网络流背景。 7:50–8:30 T1,有一些简单的性质,缩减两端点后枚举一下翻转的区间就可以了。然后花了一点时间写 spj 调试。 8:30–10:20 T2,比较纯粹的构造题。有网络流做法,…...

Spark Streaming DStream转换
DStream上的操作与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的算子,如:updateStateByKey()、transform()以及各种Window相…...

水果商城,可运行
文章目录项目介绍一、技术栈二、本项目分为前后台,有管理员与用户两种角色;1、管理员角色包含以下功能:2、用户角色包含以下功能:三、用户功能页面展示四、管理员功能页面展示五、部分代码展示六、获取整套项目源码项目介绍 一、…...

LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像
LiveGBS国标GB/T28181国标视频流媒体平台-功能报警订阅配置报警预案告警截图及录像1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.3.3、尝试触发摄像头…...

软件测试---测试分类
一 : 按测试对象划分 1.1 可靠性测试 可靠性(Availability)即可用性,是指系统正常运行的能力或者程度,一般用正常向用户提供软件服务的时间占总时间的百分比表示。 1.2 容错性测试 行李箱 , 四个轮子 , 坏了一个 , 说明这个容错…...
剑指 Offer II 015. 字符串中的所有变位词
题目链接 剑指 Offer II 015. 字符串中的所有变位词 mid 题目描述 给定两个字符串 s和 p,找到 s中所有 p的 变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 变位词 指字母相同,但排列不同的字符串。 示例 1: 输…...
【SpringCloud】SpringCloud详细教程之微服务比较
目录前言一.什么是微服务?为什么要使用微服务二.微服务对比三.企业开发场景前言 我会通过实际代码来给展示每个组件的用法 一.什么是微服务?为什么要使用微服务 分布式,把一个项目拆分成多个模块,每一个模块相当于一个服务。 微…...

二.项目使用vue-router,引入ant-design-vue的UI框架,引入less
根据前文《使用Vue脚手架工具搭建vue项目》搭建好脚手架后使用 1.vue-router 2.引入UI框架ant design vue 3.引入less 1.vue-router vue-router分为两种模式(默认为hash模式): hash history hash: 特征: 1.hash会在浏览器路径里带#号&#…...

网络安全怎么学?20年白帽子老江湖告诉你
很多人都知道龙叔是个老程序员,但却不知道其实我也是个H客,20年前我就开始痴迷于H客技术,可以说是网络安全方面的老江湖了。 到现在,我还依然会去研究这一块,偶尔会和一些网安的朋友交流技术,比如说红盟的…...

药房管理系统;药库管理系统
第一,主要功能: 本系统集日常销售、药品进销存、会员积分、GSP管理等药店所需的所有功能于一体,实现店铺管理的全部自动化。第二、新功能: 增加了“按功能查询药品”的功能,使软件用户可以根据客户的症状推荐合适…...

深眸科技|机器视觉提升制造性能,焕发传统企业智造新活力!
随着机器视觉技术的成熟与发展,其在工业制造中得到越来越广泛的应用。机器视觉在工业制造领域的应用朝着智能识别、智能检测、智能测量以及智能互联的完整智能体系方向发展。此外,快速变化的市场需求,不断涌入行业的竞争对手,让传…...
ubuntu安装SSH的方法
Ubuntu安装SSH的方法。14版的ubuntu经过测试,默认没有开启SSH,所以需要安装。 1、虚拟机设置网卡为桥接模式,即NAT。12版虚拟机默认的。 2、查看ubuntu使用的ip。 ifconfig即可查看,14版的ubuntu自带这个命令。 3、查看是否pi…...

哪种蓝牙耳机通话效果好?通话清晰的蓝牙耳机推荐
出门的时候,如果戴耳机和别人通话,就不必把耳机摘下来,接电话变得前所未有的简单。现在的蓝牙耳机,已经不是单纯的用来听音乐了,而是一种更好的功能。下面这四款蓝牙耳机不仅适合听歌,通话还清晰࿰…...
IT运维如何完成一场高质量复盘
复盘的终极目标是:还原事实,找到薄弱点加以改进。 提到复盘,很多人的第一反应是线上故障,有人要背锅了。 复盘真正的价值是还原事实,在薄弱处加以改进。如何做一次高质量的复盘,我们给出3点建议。 1、坦…...

JVM调优面试题——基础知识
文章目录1、JDK,JRE以及JVM的关系2、编译器到底干了什么事?3、类加载机制是什么?3.1、装载(Load)3.2、链接(Link)3.3、初始化(Initialize)4、类加载器有哪些?5、什么是双亲委派机制?6、介绍一下JVM内存划分(…...
三、mongdb 查询
一、 MongoDB文档检索 MongoDB中有多种方式可以检索文档: 1.1 查询过滤器 使用查询过滤器从集合中检索文档。查询过滤器是一组键值对,可按字段值查询文档。 例如: db.col.find({"status":"A"})这个示例查询status等于“A”的文档。 1.2 范围查询操作符…...

python的 ping 网络状态监测方法(含多IP)
ping 基本概念 ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Messag…...
【独家】华为OD机试提供C语言题解 - 单词反转
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明单词…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...

[10-1]I2C通信协议 江协科技学习笔记(17个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...