鸿蒙小助手 2026-10-21 13:57:06 发布本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:
提升鸿蒙应用冷启动速度案例(三) -华为开发者话题 | 华为开发者联盟
缩短AbilityStage生命周期阶段耗时
AbilityStage代表应用级生命周期。onCreate在进程启动时执行,用于初始化全局资源;onConfigurationUpdate响应配置变更;onDestroy在应用销毁时触发,负责清理资源。它仅实例化一次,绑定应用进程,而非单个页面或Ability。详细介绍可以参见(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides /abilitystage?ha_source=zxqy-IT&ha_sourceId=89000468)。
避免在AbilityStage生命周期回调接口进行耗时操作
在应用启动流程中,系统会执行 AbilityStage 的生命周期回调函数,在onCreate、onWindowStageCreate、onForeground等生命周期回调函数中执行耗时操作都会导致启动缓慢问题。不建议在这些回调函数中执行耗时操作,建议将耗时操作通过异步任务延迟处理或放到其他线程执行。下面以UIAbility为例进行说明,参见(https://developer.huawei.com/consumer/cn/doc/harmonyosguides/ uiability-lifecycle?ha_source=zxqy-IT&ha_sourceId=89000468)。
UIAbility生命周期状态:

下面示例代码在UIAbility的回调函数onCreate()中分别执行了同步和异步操作:

下面使用Launch分析,对比优化前同步执行耗时操作和优化后异步执行耗时操作的启动性能。分析从Process Creating阶段开始,到First Frame - Render Phase阶段结束。优化前后的启动耗时如下图所示。
优化前,同步执行操作(computeTask),应用冷启动耗时:

优化后异步执行操作(computeTaskAsync),应用冷启动耗时:

缩短加载绘制首页阶段耗时
首页加载绘制阶段主要包含加载首页内容、测量布局、刷新组件和绘制。处理页面生命周期时,避免耗时操作,优先创建首页需要显示的组件,使用if分支语句隐藏不需要显示的组件,减少创建过程的耗时。耗时操作建议通过异步任务或放到其他线程执行。
自定义组件生命周期回调接口里避免耗时操作
自定义组件的生命周期变更会调用相应的回调函数。aboutToAppear()函数会在创建自定义组件实例后,页面绘制之前执行;onPageShow()函数在进入前台的时候显示;因此,为了不阻塞页面绘制,应避免在这两个回调函数中执行耗时操作。关于自定义组件生命周期的详细说明,参见(https://developer.huawei.com/ consumer/cn/doc/harmonyos-guides/arkts-page-custom-components-lifecycle?ha_source=zxqy-IT&ha_sourceId=89000468)。
被@Entry装饰的组件(页面)生命周期:

在Page的回调函数aboutToAppear()中分别执行同步和异步操作的示例代码如下:

下面使用Launch分析,对优化前同步执行耗时操作及优化后异步执行耗时操作的启动性能进行对比分析。分析阶段的起点Process Creating,阶段终点为First Frame - Render Phase。
优化前,同步执行操作(computeTask),应用冷启动耗时:

优化后,异步执行操作(computeTaskAsync),应用冷启动耗时:

使用本地存储加载首页数据
在应用启动流程中,大部分应用的首页数据信息需要等待网络请求返回的数据解析结果,因此可以将首页数据通过应用数据持久化的方式进行本地存储,再次冷启动时优先展示已存储数据,网络请求后再次刷新首页数据。使用本地存储优先展示,可减少首帧展示延迟,缩短用户可见白屏时间,提升冷启动体验。
使用本地存储首页数据流程图:


【场景示例】
应用首页需展示从网站获取的图片信息。应用首次启动时,会在aboutToAppear()中发起网络请求,获取返回的图片数据后,将图片解析并展示在首页。图片信息会存储在本地应用沙箱内,应用再次冷启动时,首先从沙箱获取图片信息,若存在,则直接解析并展示。网络请求返回时,再更新图片信息。
以下为关键示例代码:



上述详细案例实现参考(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-application-cold-start-optimization#section178661559171413?ha_source=zxqy-IT&ha_sourceId=89000468),分析阶段从启动Ability开始,到首次解析Pixelmap后的第一个vsync结束。
优化前,未使用本地存储数据:

优化后,使用本地存储数据:

对比数据如下:

针对应用冷启动过程中网络请求耗时久的问题,提供了一个三方库供开发者使用,优化方式是首页内容复用,先使用本地缓存的数据。三方库链接:https://ohpm.openharmony.cn/#/cn/detail/ @hadss%2Fdatacache?ha_source=zxqy-IT&ha_sourceId=89000468。
本文介绍了缩短AbilityStage生命周期阶段耗时,包括避免在AbilityStage生命周期回调接口进行耗时操作,缩短加载绘制首页阶段耗时。通过这几篇案例,我们已经了解了一些应用冷启动的流程中的注意事项和优化方法,建议开发者根据实际需求情况灵活运用,在架构流程设计多下功夫,合理运用多线程模式。后续文章我们会介绍一些其他性能指标优化方法,敬请期待。
----------------------------------------------------------------------------------------------------------

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


【扫码加入 HarmonyOS DFX 技术交流群】
相关推荐
鸿蒙小助手
29
0
鸿蒙小助手
29
0
GeorgePanda
4352
0
鸿蒙小助手
421
0
828
1
鸿蒙小助手
致力于为鸿蒙开发者谋福利
帖子
提问
粉丝
提升鸿蒙应用冷启动速度案例(二)
2026-10-21 13:51:39 发布提升鸿蒙应用冷启动速度案例(一)
2026-10-21 13:44:01 发布



京公网安备:11010502051901号