分析应用性能

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

如果应用响应速度慢、动画播放不流畅、卡顿或耗电量过高,就表示应用的性能不佳。若要解决性能问题,就需要找出应用的哪些方面导致不能高效地利用资源(例如 CPU、内存、图形、网络或设备电池)。

为了找出并解决这些问题,您可以使用本主题中介绍的性能分析和基准化分析工具与技巧。如需了解衡量性能的技巧,以及关于如何利用这些技巧解决具体问题的示例,请参阅衡量性能

Android Studio 提供了一些性能分析工具来帮助您找出并直观呈现潜在的问题:

  • CPU 性能分析器有助于查出运行时性能问题。
  • 内存分析器有助于跟踪内存分配情况。
  • 网络性能分析器可监控网络流量使用情况。
  • 能耗性能分析器可跟踪能耗情况,这有助于分析电池电量消耗过快的问题。

如需详细了解这些工具,请参阅 Android Studio 性能分析器页面。

借助 Jetpack 基准库,您的应用可衡量各种重要操作:

  • Macrobenchmark:测量重要的性能用例,包括应用启动以及由界面动画或滚动等操作触发的重新绘制。
  • Microbenchmark:测量特定函数的 CPU 开销。

如需详细了解这些库,请参阅对您的应用进行基准测试页面。

可分析应用

Profileable 是在 Android Q 中引入的清单配置。它可以指定设备用户能否通过 Android Studio、Simpleperf 和 Perfetto 等工具对此类应用进行性能分析。

profileable 之前,大多数开发者只能对 Android 上的可调试应用进行性能分析,这会导致性能显著下降。这些性能下降可能会导致分析结果无效,尤其是当它们与时间有关时。表 1 总结了可调试应用和可分析应用之间的区别。

表 1. 可调试应用和可分析应用之间的主要区别摘要。
功能 可调试 可分析
内存分析器 完整

是:

否:

CPU 性能分析器 完整

是:

否:

网络性能分析器
能耗性能分析器
事件监视器

引入了 Profileable,以便开发者可以选择允许其应用向分析工具公开信息,同时导致的性能下降微乎其微。可分析 APK 实质上是一个清单文件中添加了一行 <profileable android:shell="true"/> 的发布版 APK。

如需构建可分析应用,您需要先构建发布版应用,然后更新其清单文件,将发布版应用转换为可分析应用。

构建发布版应用

如需出于性能分析目的构建发布版应用,请执行以下操作:

  1. 使用调试密钥为应用签名,方法是将以下几行代码添加到应用的 build.gradle 文件。如果您已有有效的发布 build 变体,则可以跳到下一步。

            buildTypes {
              release {
                signingConfig signingConfigs.debug
              }
            }
          
  2. 在 Android Studio 中,依次选择 Build > Select Build Variant...,然后选择发布变体。

将发布版应用更改为可分析应用

  1. 打开 AndroidManifest.xml 文件并添加以下代码,将上述发布版应用转换为可分析应用。如需了解详情,请参阅构建应用以进行发布

    <profileable android:shell="true"/>

  2. 您可能需要将以下几行代码添加到应用的 build.gradle 文件中,具体取决于 SDK 版本。

          aaptOptions {
            additionalParameters =["--warn-manifest-validation"]
          }
        

对可分析应用进行性能分析

如需对可分析应用进行性能分析,请执行以下操作:

  1. 从开发模拟器或设备启动应用。

  2. 在 Android Studio 中,依次选择 View > Tool Windows > Profiler 来启动性能分析器。

  3. 应用启动后,点击性能分析器中的 性能分析器加号按钮 按钮以查看下拉菜单。选择您的设备,然后在 Other profileable processes 下选择应用对应的条目。

    可分析菜单
  4. 性能分析器应附加到应用。只有 CPU 和内存分析器可用,而且内存分析器的功能有限。

    可分析会话视图
    可分析菜单
    可分析菜单

注意:分析应用性能时,您应停用 Instant Run。使用 Instant Run 时会轻微影响性能,而更新方法时则会产生稍大的影响。这种性能影响可能会干扰性能分析工具提供的信息。此外,使用此功能时生成的桩方法可能会使堆栈轨迹变得很复杂。