对您的应用进行基准测试

基准测试是测试应用性能的一种方法。您可以定期运行基准测试,以帮助分析和调试性能问题,并确保近期的更改不会引起性能倒退。

Android 提供了以下两种进行基准测试的库和方法,供您分析和测试应用在不同情况下的性能表现:Microbenchmark 和 Macrobenchmark。

Microbenchmark

借助 Microbenchmark 库,您可以直接在一个循环中对应用代码进行基准测试。该库旨在测量 CPU 工作情况,测量结果将用于评估最佳性能(即时 [JIT] 编译已预热,磁盘访问已缓存),使用内部循环或特定热函数时就可能获得这种最佳性能。此外,该库只能测量您可以直接单独调用的代码。

如果您的应用需要处理复杂的数据结构,或者采用了一些会在应用运行期间进行多次调用的特定计算密集型算法,就可能适合进行基准测试。您还可以测量界面的各个部分。例如,您可以测量绑定一个 RecyclerView 项目的成本有多高、膨胀布局需要花多长时间,以及从性能的角度来看,View 类的“布局和测量”遍历的要求有多高。

不过,您无法测量进行基准测试的用例对整体用户体验所产生的影响。在某些情况下,您无法通过基准测试判断卡顿或应用启动时间等瓶颈是否得到了改善。因此,首先使用 Android 性能分析器找出这类瓶颈至关重要。找到要调查和优化的代码后,您便可以快速轻松地反复运行会进行基准测试的循环,并获得噪声较少的结果,让您能够专注于需要改进的方面。

Microbenchmark 库只能报告应用的相关信息,而非整个系统的相关信息。因此,基准测试最适合用来分析应用在特定情况下的性能,而不是分析系统的整体性能问题。

Macrobenchmark

Macrobenchmark 库可测量更大规模的最终用户互动,例如启动、与界面交互和动画。与 Microbenchmark 库不同,Macrobenchmark 可让您直接控制受测性能环境。因此,通过控制应用的编译、启动和停止,您可以直接测量实际的应用启动或滚动,而不仅仅是在缓存所有磁盘访问的情况下测量经过 JIT 编译的特定热函数。

该库可在外部从您通过测试构建的测试应用注入事件并监控结果。因此,您在编写基准测试时,不要直接调用应用代码,而要像用户那样在应用中导航。

基准测试库之间的对比

Microbenchmark Macrobenchmark
函数 测量各个函数 测量高级别入口点或交互(例如,activity 启动或列表滚动)
范围 对 CPU 工作情况进行进程内测试 对整个应用进行进程外测试
速度 迭代速度较快(通常不到 10 秒) 迭代速度中等(可能超过 1 分钟)
跟踪 可选的方法采样和跟踪 结果包含性能分析轨迹
最低 API 版本 14 23