写点什么

【第八期】利用 Launch 完成启动时延分析

  • 2026-09-08
    北京
  • 本文字数:2492 字

    阅读完需:约 8 分钟

AI摘要

华为 DevEco Profiler 的 Launch 场景支持冷启动耗时分阶段采集与瓶颈定位,覆盖自动/手动两种启动模式适配。

  • Launch 模板可自动重启或终止应用,配合弹窗提示实现可控录制
  • 支持对已安装未运行应用直接创建会话,无需预先启动
  • 分阶段抓取冷启动各环节耗时数据,定位具体延迟来源

适合 Android/鸿蒙原生应用开发者、性能优化工程师、客户端架构师阅读

本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:【第八期】利用Launch完成启动时延分析-华为开发者话题 | 华为开发者联盟

开发者需要分析启动过程的耗时瓶颈,优化应用或服务的冷启动速度时,可使用 Profiler 的 Launch 场景分析功能,录制启动过程中的关键数据,识别启动缓慢的原因。Profiler Launch 可拆解应用冷启动过程,抓取各阶段的耗时数据,帮助开发者快速分析冷启动过程的耗时瓶颈。

Launch 操作及相关介绍

启动模式介绍

录制前应用的启动模式分为自动启动

和手动启动

可点击图标切换两种不同模式:

• 若选择自动启动模式,当用户使用 Launch 模板并开始录制时,将自动重启所选应用。

• 若选择手动启动模式,在开始录制时,只会自动终止所选应用,等待界面出现弹窗提示。启动应用后,开发者需要手动启动应用。

抓取 Launch 数据

1. 打开 DevEco Profiler,选择场景模板,创建会话。

• 在设备列表中选择设备。

• 在进程列表中选择要调试的应用(可以是正在运行的应用,也可以是已安装但未启动的应用)。

• 在主界面的新建任务区域,单击要创建的场景调优分析任务类型,并单击「Create Session」。

2. 配置并确认会话环境。在录制详情区域,工具控制栏上有很多小图标,鼠标悬停会显示功能提示,可以添加一些录制选项。各泳道区域也有下拉框选项,下拉选择不同的设置可以调整录制功能。

支持在录制前单击

指定要录制的泳道。

3. 启动录制,复现性能劣化场景。

单击任务窗口左上角的 

或左侧的任务列表中的

启动录制。

在调优设备操作 APP,执行要验证的操作,等待任务状态由“initializing”变为“recording”。整个录制过程中 DevEco Profiler 不能再点击其他的模板进行操作,如果想录制其他模板可以结束本次录制,重新选择其他模板开始录制。

4. 性能劣化场景完成,停止录制。

单击停止按钮 

进入数据解析阶段,泳道任务状态由“analyzing”变为“rendering”时解析结束,右侧调优详情区域显示具体调优内容。解析过程可能包含大量的数据,请耐心等待解析完成。

查看启动过程中各阶段的耗时情况

1. 框选 Launch 泳道图区域的一个阶段或多个阶段,在下方的 Details 区域中,可查看到所选阶段的耗时统计情况。展开各阶段的统计信息折叠表,可以看到各个任务的具体耗时信息,单击跳转按钮,可直接跳转至相关线程打点任务中。

2. DevEco Studio 6.0.0 Beta1 版本新增 Load ETS Files 区域,支持查看冷启动过程中 ETS 文件的加载情况。各字段含义如下:

3. 切换到 TOP Redundant 区域,可查看冷启动过程中 TOP 100 冗余 ETS 加载文件信息。若 File Name 字段显示为蓝色,双击可快速跳转至对应工程源文件。

分析静态资源库加载耗时

1. 展开 Launch 泳道,其中的 Static Initialization 子泳道展示启动过程中各静态资源库的加载耗时。

2. 单击单个静态资源库色块,或框选多个静态资源库色块,下方的 Details 区域展示所选对象的耗时统计信息。针对耗时超过预期的加载任务,可单击跳转按钮,跳转至相关线程打点任务中进行深度分析。

查看核心线程在 CPU Core 的运行情况

1. 展开 Launch 泳道,其中的 Running CPU Cores 子泳道展示启动过程中的关键线程具体运行在哪个 CPU 核心。

 2. 单击单个进程色块或框选多个进程色块,下方的 Details 区域展示所选对象的运行情况统计信息,单击 CPU 的跳转按钮,可跳转到 CPU Core 泳道查看详细的调度信息。

查看启动过程相关的线程 Trace 数据

1. 展开 Launch 泳道,除 Static Initialization 和 Running CPU Cores 子泳道外,还包含启动过程的关键线程的状态和 Trace 数据。

2. 单击单个切片色块或框选多个切片色块,可查看所选对象的详情。

 

冷启动缓慢示例分析

运行以下示例代码,开发者可以明显感知到应用启动速度较慢。接下来,开发者可以通过此示例,结合 Launch 分析应用冷启动缓慢的问题。

 首先创建 Launch 分析录制,可以观察到整个启动时间较长。UI Ability OnForeground 阶段在应用冷启动过程中耗时最多,达到了 3.3 秒。因此,需要重点分析该阶段的耗时。

针对应用冷启动问题的性能分析,可以选择分析主线程的 Trace 数据或采样得到的函数热点。

分析主线程的 Trace 数据

在 UI Ability OnForeground 阶段的耗时主要由 aboutToAppear 引起。通过分析 aboutToAppear 中的代码逻辑,可以确定计算任务 computeTask 是导致耗时的原因。

分析采样得到的函数热点

1. 单击“Launch”泳道的 UI Ability OnForeground 阶段。

2. 选择“ArkTS Callstack”泳道,它会基于时间轴展示 CPU 使用率和状态变化,以及当前调用栈名称和类型。

3. 在“Details”详情面板中,可以查看这段时间内的函数热点,以 Top-Down 形式的树状列表展示。computeTask 函数在 aboutToAppear 函数中耗时最多,占整个阶段的 97.9%。双击该函数可跳转到源码。

4. 此外,点击底部 Flame Chart 按钮打开火焰图可以更直观的看出热点函数的耗时情况,如下图所示。

冷启动速度优化

通过前面的分析,冷启动缓慢的原因是在 aboutToAppear 方法中执行了耗时计算任务。可以将 computeTask 以异步延时的方式处理,优化后的代码如下:

重新编译并运行程序,录制 Launch 过程。优化后,UI Ability OnForeground 阶段的耗时显著缩短。

查看首帧卡顿

为了识别首帧是否卡顿,可以先查看 Launch 的 Frame 泳道。应用的首帧渲染提交在 First Frame - App Phase 阶段,APP 侧的这一帧表示应用渲染的首帧。

如上所示,36 号帧被标记为红色,表示首帧出现了卡顿。鼠标左键 36 号帧,可以看到它的期望提交渲染时间为左边白色竖线区域所示,这里出现了比较严重的延时。发现问题后,开发者可以参考前面讲到的示例进行问题定位和优化。

通过本文你已经学会了如何利用 Launch 工具分析启动慢的问题,下一章节我们将介绍一些通用的提升启动速度的方法。


🔗 官网开发者学堂视频:https://developer.huawei.com/consumer/cn/training/result?type2List=201783644516849879&orderBy=1&courseType=5

🔗 社区 DFX 专题文章: https://developer.huawei.com/consumer/cn/forum/subject/2101218731402391001

【扫码加入 HarmonyOS DFX 技术交流群】