应用基准测试

基准测试是一种检查和监控应用性能的方法。您可以定期运行基准测试来分析和调试性能问题,并帮助确保您不会在最近的更改中引入回归。

Android 提供了两个基准测试库和方法来分析和测试应用中不同类型的情况:Macrobenchmark 和 Microbenchmark。

Macrobenchmark

Macrobenchmark 库测量较大的最终用户交互,例如启动、与 UI 交互和动画。该库提供了对您正在测试的性能环境的直接控制。它允许您控制编译,并允许您启动和停止应用以直接测量实际的应用启动或滚动。

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

Microbenchmark

Microbenchmark 库允许您在循环中直接对应用代码进行基准测试。这旨在测量评估最佳性能的 CPU 工作——例如预热 Just in Time (JIT) 和缓存的磁盘访问——您可能会在内部循环或特定的热函数中看到。该库只能测量您可以在隔离状态下直接调用的代码。

如果您的应用需要处理复杂的数据结构,或者在应用运行期间多次调用某些特定计算密集型算法,那么这些可能是进行基准测试的好案例。您还可以测量 UI 的部分内容。例如,您可以测量 RecyclerView 项目绑定的成本、布局膨胀需要多长时间,或者从性能角度来看,View 类的布局和测量传递有多么苛刻。

但是,您无法衡量基准测试用例对整体用户体验的贡献。在某些情况下,基准测试并不能告诉您是否改进了瓶颈,例如卡顿或应用启动时间。因此,首先使用Android Profiler识别这些瓶颈至关重要。找到要调查和优化的代码后,基准测试循环可以以快速简便的方式重复运行,从而产生更少的噪声结果,让您专注于一个改进领域。

Microbenchmark 库仅报告有关您应用的信息,而不报告有关整个系统的信息。因此,它最擅长分析特定于应用的情况的性能,而不是可能与整体系统问题相关的性能。

基准库比较

Macrobenchmark Microbenchmark
API 版本 23 及更高版本 14 及更高版本
功能 测量高级入口点或交互,例如活动启动或滚动列表。 测量单个函数。
范围 应用完整版进程外的测试。 CPU 工作的进程内测试。
速度 中等迭代速度。可能超过一分钟。 快速的迭代速度。通常少于 10 秒。
跟踪 结果附带性能分析跟踪。 可选的方法采样和跟踪。