现代Android性能工具

在移动应用开发中,保持应用的高性能是至关重要的。Android平台提供了多种性能工具,可以帮助开发者测量、分析和改进应用的性能表现。本文将介绍Android性能测量项目、性能测量工具和性能改进工具的详细内容,以及它们的使用方法和效果。

性能测量项目

性能测试项目包含启动时间及UI卡顿。

启动时间

图片

应用启动时间是用户体验的关键指标之一,可以根据应用启动的类型和状态进行区分:

  • 冷启动:设备启动后首次启动或应用由于进程终止而重新启动
  • 温启动:从应用的onCreate方法开始启动
  • 热启动:将应用带到前台
    在性能测量中,启动时间可以根据首次显示时间(TTID)和完全显示时间(TTFD)来评估应用的启动性能。

卡顿

卡顿是指应用无法保持每秒60帧的流畅度,导致用户感觉到界面不流畅。在性能测量中,可以使用卡顿统计工具或宏基准测试来检测应用的卡顿情况。

卡顿统计:无法跟上每秒60帧的速度时 宏基准测试:帧处理速度超过16ms时

性能测量工具

性能测量工具包含宏基准测试和卡顿统计工具。

宏基准测试

宏基准测试是用于测量应用启动时间和卡顿的库,具有以下特点:

  • 可选择要测量的部分并进行旋转,设计适用于用户案例
  • 不直接调用代码进行测量,而是模拟实际用户操作
  • 需要Android M(API 23)及更高版本的设备支持
  • 提供了测量启动时间和卡顿的指标,如StartupTimeMetric和FrameTimingMetric
    快速开始
  1. 在项目中右键单击
  2. New > Module.
  3. 选择Benchmark Template
  4. 选中宏基准测试
  5. 选择最低SDK
  6. 完成
  • 创建benchmark模块
  • 创建benchmark构建类型
  • manifest中创建
    标记
  • 创建测试代码
    测试代码

@RunWith(AndroidJUnit4::class)
class ExampleStartupBenchmark {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()

@Test
fun startup() = benchmarkRule.measureRepeated(
    packageName = "com.your.package.name",
    metrics = listOf(StartupTimingMetric()),
    compilationMode = CompilationMode.DEFAULT,
    iterations = 5,
    startupMode = StartupMode.COLD,
    setupBlock = {
        pressHome()
    }
) {
    startActivityAndWait()
    Thread.sleep(3000)
}

}
metrics

  • StartupTimeMetric(启动时间)— 应用启动时间
  • FrameTimingMetric(卡顿)— 每帧的成本
    compilationMode
  • None, Partial(部分编译,类似于通过Google Play商店安装应用程序的状态),Full
    startupMode
  • 冷启动 — 进程未存活状态
  • 温启动 — 从当前进程中启动activity
  • 热启动 — 将现有activity带到前台
    测试结果
  • 显示最小值、最大值和中位数
  • 时间信息以文件链接形式呈现,点击链接可在分析器中查看详细结果
    卡顿统计工具

卡顿统计工具帮助开发者发现和分析应用的卡顿情况,具有以下功能:

  • 基于FrameMetrics API,并添加了卡顿推理和UI状态功能
  • 可通过JankStats确定帧是否出现卡顿
  • 提供每帧的状态信息,包括屏幕状态和用户操作
    快速开始
  1. 导包
  2. Activity中onCreate()方法调用入口函数
  3. onResume/onPause设置isTrackingEnabled

卡顿推理 完成基本代码编写后,可以通过jankFrameListener获取每个帧的信息。可使用isJank字段判断是否存在卡顿。

UI状态 每帧的状态包含stateName和state两种字符串数据。打印日志将显示如下格式: 例如 [RecyclerView: Idle, RecyclerView: Scroll, Activity: YourActivity] 可利用此状态进行情况判断并解决卡顿问题。不过可能会有些麻烦。

实际使用后,对于检测起到了一定的帮助。即使在认为界面运行流畅的情况下,日志中也会记录到卡顿,通过详细的滚动测试,开始注意到轻微的卡顿。它明确了人眼可能产生分歧的部分,从而避免了不必要的(或情绪化的)沟通。

性能改进工具

基准配置文件

基准配置文件用于预编译类和方法的清单,可以提升方法执行速度,从而改善应用性能。应用基准配置文件的过程包括创建文件、提取、复制到项目中并验证效果。

基本流程:

创建基准配置文件 > 提取 > 复制到main/src中 > 验证(基准测试)
应用示例

创建基准配置文件

  1. 编写代码等待主页Activity渲染
    @RunWith(AndroidJUnit4::class)
    class ExampleBaselineProfile {
    @get:Rule
    val rule = BaselineProfileRule() @Test
    fun startHomeAndAvatarLoading() {
    rule.collectBaselineProfile(“com.your.package.name”) {
    // start the app flow
    pressHome()
    startActivityAndWait()
    device.wait(
    Until.hasObject( By.res(packageName, “left_menu_button”)),
    TimeUnit.SECONDS.toMillis(30)
    )
    }
    }
    }
  2. 执行应用并提取生成的文件(需要root权限)
  3. 将文件复制到项目中,并验证基准配置文件的应用效果,文件更名为baseline-prof.txt,并复制到main/src中
  4. 验证
    可通过以下方式将profile应用于启动时间的测量。

compilationMode = CompilationMode.Partial(
baselineProfileMode = BaselineProfileMode.Require
),
通过应用基准配置文件,可以在项目中显著减少启动时间,提升应用的性能。

结语

Android性能工具的使用对于优化应用性能至关重要。通过测量启动时间、检测卡顿情况以及应用基准配置文件等方式,开发者可以更好地了解应用的性能状况并进行针对性的优化。建议开发者在开发过程中充分利用这些性能工具,以提升应用的用户体验和竞争力。

阅读原文


作者简介: Android技术达人 近10年一线开发经验 关注并分享Android、Kotlin新技术,新框架 多年Android底层框架修改经验,对Framework、Server、Binder等架构有深入理解。欢迎关注微信公众号:虎哥Lovedroid

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/413900.html

联系我们
联系我们
分享本页
返回顶部