每个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机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明单词…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
