在移动应用开发中,保持应用的高性能是至关重要的。Android平台提供了多种性能工具,可以帮助开发者测量、分析和改进应用的性能表现。本文将介绍Android性能测量项目、性能测量工具和性能改进工具的详细内容,以及它们的使用方法和效果。
性能测量项目
性能测试项目包含启动时间及UI卡顿。
启动时间
应用启动时间是用户体验的关键指标之一,可以根据应用启动的类型和状态进行区分:
- 冷启动:设备启动后首次启动或应用由于进程终止而重新启动
- 温启动:从应用的onCreate方法开始启动
- 热启动:将应用带到前台
在性能测量中,启动时间可以根据首次显示时间(TTID)和完全显示时间(TTFD)来评估应用的启动性能。
卡顿
卡顿是指应用无法保持每秒60帧的流畅度,导致用户感觉到界面不流畅。在性能测量中,可以使用卡顿统计工具或宏基准测试来检测应用的卡顿情况。
卡顿统计:无法跟上每秒60帧的速度时 宏基准测试:帧处理速度超过16ms时
性能测量工具
性能测量工具包含宏基准测试和卡顿统计工具。
宏基准测试
宏基准测试是用于测量应用启动时间和卡顿的库,具有以下特点:
- 可选择要测量的部分并进行旋转,设计适用于用户案例
- 不直接调用代码进行测量,而是模拟实际用户操作
- 需要Android M(API 23)及更高版本的设备支持
- 提供了测量启动时间和卡顿的指标,如StartupTimeMetric和FrameTimingMetric
快速开始
- 在项目中右键单击
- New > Module.
- 选择Benchmark Template
- 选中宏基准测试
- 选择最低SDK
- 完成
- 创建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确定帧是否出现卡顿
- 提供每帧的状态信息,包括屏幕状态和用户操作
快速开始
- 导包
- Activity中onCreate()方法调用入口函数
- onResume/onPause设置isTrackingEnabled
卡顿推理 完成基本代码编写后,可以通过jankFrameListener获取每个帧的信息。可使用isJank字段判断是否存在卡顿。
UI状态 每帧的状态包含stateName和state两种字符串数据。打印日志将显示如下格式: 例如 [RecyclerView: Idle, RecyclerView: Scroll, Activity: YourActivity] 可利用此状态进行情况判断并解决卡顿问题。不过可能会有些麻烦。
实际使用后,对于检测起到了一定的帮助。即使在认为界面运行流畅的情况下,日志中也会记录到卡顿,通过详细的滚动测试,开始注意到轻微的卡顿。它明确了人眼可能产生分歧的部分,从而避免了不必要的(或情绪化的)沟通。
性能改进工具
基准配置文件
基准配置文件用于预编译类和方法的清单,可以提升方法执行速度,从而改善应用性能。应用基准配置文件的过程包括创建文件、提取、复制到项目中并验证效果。
基本流程:
创建基准配置文件 > 提取 > 复制到main/src中 > 验证(基准测试)
应用示例
创建基准配置文件
- 编写代码等待主页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)
)
}
}
} - 执行应用并提取生成的文件(需要root权限)
- 将文件复制到项目中,并验证基准配置文件的应用效果,文件更名为baseline-prof.txt,并复制到main/src中
- 验证
可通过以下方式将profile应用于启动时间的测量。
compilationMode = CompilationMode.Partial(
baselineProfileMode = BaselineProfileMode.Require
),
通过应用基准配置文件,可以在项目中显著减少启动时间,提升应用的性能。
结语
Android性能工具的使用对于优化应用性能至关重要。通过测量启动时间、检测卡顿情况以及应用基准配置文件等方式,开发者可以更好地了解应用的性能状况并进行针对性的优化。建议开发者在开发过程中充分利用这些性能工具,以提升应用的用户体验和竞争力。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/413900.html