无论你是发布一个新的 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.安装包优化