性能评估是一种检查和监控应用性能的方法。您可以定期运行基准测试,以分析和调试性能问题,并帮助确保您不会在近期更改中引入回归。
Android 提供了两个性能评估库和方法,用于分析和测试应用中的不同情况:Macrobenchmark 和 Microbenchmark。
Macrobenchmark
Macrobenchmark 库用于衡量较大的最终用户互动,例如应用启动、UI 互动和动画。该库可直接控制您正在测试的性能环境。它允许您控制编译,并允许您启动和停止应用,以直接衡量实际的应用启动或滚动性能。
Macrobenchmark 库从一个包含您的测试构建的测试应用外部注入事件并监控结果。因此,在编写基准测试时,您不直接调用您的应用代码,而是像用户一样在应用中导航。
Microbenchmark
Microbenchmark 库允许您在循环中直接评估应用代码。这旨在衡量 CPU 工作,评估最佳情况下的性能——例如预热的即时 (JIT) 编译和缓存的磁盘访问——这些性能可能在内部循环或特定热门函数中出现。该库只能衡量您可以在隔离环境中直接调用的代码。
如果您的应用需要处理复杂的数据结构,或者有某些在应用运行期间多次调用的计算密集型算法,这些都可能是很好的性能评估用例。您还可以测量 UI 的部分。例如,您可以测量 RecyclerView
项绑定成本、膨胀布局所需的时间,或者从性能角度来看您的 View
类的布局和测量过程的要求有多高。
但是,您无法衡量基准测试用例对整体用户体验的贡献。在某些场景中,性能评估无法告诉您是否正在改进卡顿或应用启动时间等瓶颈。因此,首先使用 Android Profiler 识别这些瓶颈至关重要。找到您想要调查和优化的代码后,基准测试循环可以快速、轻松地重复运行,从而产生更少噪声的结果,让您专注于一个改进领域。
Microbenchmark 库仅报告有关您的应用的信息,而不报告整个系统的信息。因此,它最适合分析特定于应用的性能情况,而不是可能与整体系统问题相关的情况。
性能评估库比较
Macrobenchmark | Microbenchmark | |
---|---|---|
API 版本 | 23 及更高版本 | 14 及更高版本 |
功能 | 衡量高级入口点或互动,例如 Activity 启动或列表滚动。 | 衡量单个函数。 |
范围 | 完整的应用进程外测试。 | CPU 工作的进程内测试。 |
速度 | 中等迭代速度。可能超过一分钟。 | 快速迭代速度。通常少于 10 秒。 |
跟踪 | 结果附带性能剖析跟踪。 | 可选的方法采样和跟踪。 |
推荐给您
- 注意:当 JavaScript 关闭时显示链接文本
- 创建基准配置文件 {:#creating-profile-rules}
- JankStats 库
- 应用性能测量概览