每个Android开发都应需知的性能指标~

news2024/12/28 18:08:07

无论你是发布一个新的 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) 使用这些指标的数据来高效地预编译代码,以优化未来启动。

startup types

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)错误。

基线

  1. 日活中出现一次ANR的比例应该小于0.47%。
  2. 日活中出现两次或更少的ANR的比例应该小于0.24%。

日活指的是一日内登录或使用应用程序的用户数。


如果 Android 应用的界面线程处于阻塞状态的时间过长,会触发“应用无响应”(ANR) 错误。如果应用位于前台,系统会向用户显示一个对话框,如下所示。ANR 对话框会为用户提供强制退出应用的选项。

anr-example-framed.png

5. 崩溃(Crash)

只要出现未处理的异常或信号导致的意外退出,Android应用就会崩溃。

基线

没有出现崩溃的比例应该大于99.95%


使用 Java 或 Kotlin 编写的应用会在抛出未处理的异常(由 Throwable 类表示)时崩溃。使用机器码或 C++ 语言编写的应用会在执行过程中遇到未处理的信号(如 SIGSEGV)时崩溃。

当应用崩溃时,Android 会终止应用的进程并显示一个对话框,告知用户应用已停止,如下图所示。

crash-example-framed.png

6. 内存消耗(Memory Consumption)

应用程序当前使用的物理内存的大小。

基线

Untitled_2023-03-02_04-43-47.png

如果 Android 应用程序消耗过多的内存,在运行时可能无法在内存中分配一个对象,就会抛出一个 OutOfMemoryError,导致应用突然崩溃,并显示应用程序 "已经停止 "的通知,创造一个糟糕的用户体验。

7. CPU 利用率(CPU percent utilization)

应用在运行时耗费的CPU处理能力的百分比

基线

android performance mertrics.png


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.安装包优化

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

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

相关文章

【LEAP模型】能源环境发展、碳排放建模

本次内容突出与实例结合&#xff0c;紧密结合国家能源统计制度及《省级温室气体排放编制指南》&#xff0c;深入浅出地介绍针对不同级别研究对象时如何根据数据结构、可获取性、研究目的&#xff0c;构建合适的能源生产、转换、消费、温室气体排放&#xff08;以碳排放为主&…

【NLP相关】深度学习领域不同编程IDE对比

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

死锁相关介绍【内含哲学家就餐问题】

死锁 死锁是这样一种情形&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 场景1&#xff1a;一个线程&#xff0c;一把锁 一个线程&#xff0c;一把锁&#xff0c;线程…

【Linux】孤儿进程

在Linux中&#xff0c;如果子进程运行时&#xff0c;父进程因为某些原因先行终止&#xff0c;就称该子进程为孤儿进程。 我们编写如下代码&#xff1a; 子进程一直在运行&#xff0c;父进程运行一段时间后自动终止。运行该程序观察现象&#xff1a; 最开始时&#xff0c;子进程…

Unity 命令行发Android包

unity.exe 只允许存在一个 如果开了ide 或者之前的没关掉 就不能运行了 C: cd C:\Program Files\Unity\Editor\2021.3.6f1c1\Editor\ Unity.exe ^ -quit ^ -batchmode ^ -projectPath E:\puerts\UnityJenkins ^ -executeMethod Main.BuildC#代码放到任意Editor目录里 using S…

【linux】进程信号——信号的产生

进程信号一、信号概念1.1 信号理解二、产生信号2.1 通过键盘产生信号2.2 捕捉信号自定义signal2.3 系统调用接口产生信号2.3.1 向任意进程发送任意信号kill2.3.2 给自己发送任意信号raise2.3.3 给自己发送指定信号abort2.3.4 理解2.4 硬件异常产生信号2.4.1 除0异常2.4.2 野指针…

ACM-大一训练第三周(Floyd算法+并查集算法专题训练)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…

五、Bean的作用域

1 singleton 默认情况下&#xff0c;Spring的IoC容器创建的Bean对象是单例的。测试&#xff1a; package com.power.spring6.bean;public class SpringBean {public SpringBean() {System.out.println("无参数构造方法执行了");} }<?xml version"1.0"…

Ubuntu中使用Synaptic进行包管理

Synaptic概况 Synaptic 是一个轻量级的 apt 软件包管理器系统的 GUI 前端&#xff0c;所有你可以在终端中使用 apt-get 命令来做的事&#xff0c;都可以通过 Synaptic 来实现。优势 图形化安装界面&#xff0c;同时可以安装配置相关依赖&#xff0c;避免由于依赖问题导致的各类…

【c++】2023杭州月薪个税计算(chatGPT帮忙加注释)

参考信息 杭州市的个人所得税起征点是每月5000元。 个人所得税税率标准&#xff1a; 1、工资范围在1-5000元之间的&#xff0c;包括5000元&#xff0c;适用个人所得税税率为0%; 2、工资范围在5000-8000元之间的&#xff0c;包括8000元&#xff0c;适用个人所得税税率为3%; 3、工…

SpringBoot3.0 + SpringSecurity6.0+JWT

JWT_SpringSecurity SpringBoot3.0 SpringSecurity6.0JWT Spring Security 是 Spring 家族中的一个安全管理框架。 一般Web应用的需要进行认证和授权。 认证&#xff1a;验证当前访问系统的是不是本系统的用户&#xff0c;并且要确认具体是哪个用户 授权&#xff1a;经过认…

「C/C++」 标准文件操作大全

一、设备文件&#xff08;运行程序时会默认打开这三个设备文件&#xff09; stdin&#xff1a;标准输入&#xff0c;默认为当前终端&#xff08;键盘&#xff09;&#xff0c;我们使用的scanf、getchar函数默认从此终端获得数据。stdout&#xff1a; 标准输出&#xff0c;默认…

当你问ChatGPT一些奇奇怪怪的问题

ChatGPT热度好像已经没那么高了&#xff0c;貌似也蹭不到什么流量了&#xff0c;不过嘛&#xff0c;玩了一下好玩的还是得记录一下。每个问题用标题给出&#xff0c;就可以当目录了。同时附上截图&#xff0c;想直接看图的伙伴可以直接看图。回答以绿色背景的形式给出。 觉得有…

坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析

本文介绍了 TiDB 数据库的基于时间点的恢复&#xff08;PiTR&#xff09;特性&#xff0c;该特性允许用户将数据库恢复到特定时间点&#xff0c;从而避免丢失重要数据。文章首先介绍了 PiTR 技术的基本概念和工作原理&#xff0c;接着探讨了 TiDB 对 PiTR 的优化&#xff0c;包…

Java多线程(二)——同步

这一节主要是继上次提到的线程同步三大方法&#xff1a;同步代码块、同步方法、Lock锁。同步代码块&#xff0c;把出现线程安全问题的核心代码给上锁。还是继上次的例子&#xff0c;对代码块加上synchronized ("getMoney") {}之后就不会出现线程安全问题了&#xff1…

文科女生月入14k背后:转行IT软件测试不是谁都学得来!

转行软件测试背后&#xff0c;或许每个人都有自己的无奈。就拿今天要和大家分享的这位小姐姐来说吧&#xff0c;如果不是万不得已&#xff0c;又怎么会狠下心来转行到IT互联网&#xff1f; 应届生逃避就业&#xff0c;考研失败 和大多数人一样&#xff0c;小姐姐的大学生活过得…

SpringBoot入门 - 添加内存数据库H2

上文我们展示了通过学习经典的MVC分包结构展示了一个用户的增删查改项目&#xff0c;但是我们没有接入数据库&#xff1b;本文将在上文的基础上&#xff0c;增加一个H2内存数据库&#xff0c;并且通过Spring 提供的数据访问包JPA进行数据查询。准备知识点在介绍通过Spring JPA接…

专访华西二院吴邦华:隐私计算+AI全栈技术,构筑智慧医院建设的坚实数据底座|爱分析访谈

从IT时代步入DT时代&#xff0c;医疗大数据成为智慧医院建设的重要驱动力。经过多年信息化系统建设&#xff0c;很多医院已经积累了大量的医疗数据资源&#xff0c;但由于各业务系统间数据孤岛化严重、系统架构落后、数据缺乏深度治理等问题存在&#xff0c;导致现有数据深度及…

springsecurity中的类

Authentication AuthenticationProvider 每一个AuthenticationProvider对应一个Authentication 很多个AuthenticationProvider 由一个 ProviderManager管理 ProviderManager implements AuthenticationManager 一个ProviderManager有很多个 AuthenticationProvider Usern…

EasyPoi的excel模板预览与下载、导出简单/复杂数据

官方文档地址&#xff1a;easypoi官网&#xff0c;官方仅供参考&#xff0c;部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中&#xff0c;如图 excel模板预览代码 GetMapping("excel")ApiOperation("excel预览")NoLogpubli…