【第八期】利用Launch完成启动时延分析
头像 鸿蒙小助手 2026-09-08 16:59:19    发布
16 浏览 4 点赞 1 收藏

本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:

【第八期】利用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?ha_source=zxqy-IT&ha_sourceId=89000468

🔗 社区DFX专题文章: https://developer.huawei.com/consumer/cn/forum/subject/2101218731402391001?ha_source=zxqy-IT&ha_sourceId=89000468

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

©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除

京ICP备:2022009079号-2

京公网安备:11010502051901号

ICP证:京B2-20230255