【鸿蒙实战开发】HarmonyOS应用内的生命周期流转

两种生命周期原理与介绍

  1. UIAbility组件生命周期。

UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。例如在支付应用中,可以将入口功能和收付款功能分别配置为独立的UIAbility。

更多内容可查看:​​Stage模型应用组件​​和​​UIAbility组件​​。

当用户打开,切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,或者UIAbility实例发生了前后台的状态切换。UIAbility的生命周期包括Create,Foreground,Background,Destroy四个状态。
image.png

UIAbility实例创建完成之后,在进入Foreground之前,系统会创建一个WindowStage。WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载,设置WindowStage的事件订阅。

image.png

1. 页面/组件生命周期
Navigation生命周期

image.png

针对一次操作同步销毁和创建同步创建的场景(如replace),遵循以下规则:

− 涉及到页面的生命周期顺序aboutToAppear(外层自定义组件) -> onWillAppear(进场Destination页面) -> onWillHide(退出Destination页面) -> onAppear(进场页面) -> onWillShow(进场页面) -> onHide(退出页面) -> onWillDisAppear(退场页面) -> onShow(进场页面) -> onDisAppear(退场页面) -> aboutToDisAppear(退场页面)。

− 针对willShow和willHide生命周期有2种情形不会触发:前后台切换,router+Navigation混合使用,使用router跳转导致Navigation中的页面隐藏或者显示时不会触发willShow/willHide的流程。

− Dialog场景触发规则遵循show相关的生命周期(onWillShow,onShow)均从栈底到栈顶依次触发,hide相关生命周期(onWillHide,onHide)均从栈顶到栈底依次触发。

− 一次性清理多个页面,触发多个页面销毁(clear),对应的触发流程为栈顶页面最后销毁,堆栈中的其他页面从栈顶到栈底依次触发onHide -> onWillDisAppear -> onDisAppear。

− clear1,2,3页面,组件生命周期执行顺序, 当前页面是3(1). 销毁除当前页面的其他页面:从栈顶向栈底依次触发onHide -> onWillDisAppear -> onDisAppear(2). 销毁当前页面:onHide -> onWillDisAppear -> onDisAppear。

router

自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。

image.png

可参考:​​生命周期定义​​。

实际场景中生命周期的应用

场景一:启动框架的手动配置时机选择(性能优化)
场景描述以及生命周期钩子选择

场景:启动框架预加载SDK手动配置时选择。

生命周期:UIAbility生命周期的 onCreate() 回调。

方案说明

在UIAbility的onCreate生命周期回调中进行SDK或者任务初始化。

image.png

代码实现
export default class EntryAbility extends UIAbility { 
    Logger.info('Ability onCreate') 
    // 缓存应用状态: context 
    AppStorage.setOrCreate('context', this.context) 
    let startParams = ['StartupTask_005'] 
    try { 
      startupManager.run(startParams).then(() => { 
        Logger.info(`StartupTest startupManager run then, startParams = ${JSON.stringify(startParams)}`) 
      }).catch((error: BusinessError) => { 
        Logger.error(`StartupTest promise catch error, error = ${JSON.stringify(error)}; StartupTest promise catch error, startParams = ${JSON.stringify(startParams)}`) 
      }) 
    } catch (error) { 
      Logger.error(`Startup catch error , err = ${JSON.stringify(error)}`) 
    } 
  //... 
}
场景二:应用状态初始化(定义全局变量等)
场景描述以及生命周期钩子选择

场景:

  1. 将应用状态 EntryAbility中的context和windowStage存储在AppStorage中,以便于其它业务模块使用。

  2. 注册全局字体。

  3. 初始化启动页,欢迎页,广告页。

生命周期:

  1. UIAbility生命周期的 onCreate()回调,

  2. UIAbility生命周期的 onWindowStageCreate()回调。

在onCreate设置 context上下文。在onWindowStageCreate回调中初始化页面,将windowStage储存到AppStorage,windowStage.loadContent加载页面。

核心代码
// 设置全局变量/注册自定义字体  
onWindowStageCreate(windowStage: window.WindowStage): void { 
  Logger.info('Ability onWindowStageCreate') 
  // 缓存应用状态: windowStage 
  AppStorage.setOrCreate('windowStage', windowStage) 
  // 获取应用权限 
  reqPermissionsFromUser(permissions, this.context) 
  // 启动页,广告页,欢迎页加载 
  windowStage.loadContent('pages/Welcome/Welcome', (err) => { 
    if (err.code) { 
      Logger.error(`Failed to load the content, err = ${JSON.stringify(err)}`) 
      return 
    } 
    // 注册全局字体 
    FontRegister.registerCustomFont() 
    Logger.info('Succeeded in loading the content') 
  }) 
}
// 其他模块使用 
import { common } from '@kit.AbilityKit'; 
import { window } from '@kit.ArkUI'; 

@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
  context: common.UIAbilityContext | null = AppStorage.get('context') || null 
  @StorageLink('windowStage') windowStage: window.WindowStage | null = AppStorage.get('windowStage') || null 
<think>好的,用户想了解DevEco Studio的定义和用途,具体是问它是什么以及用于开发鸿蒙应用和设备的IDE。我需要结合之前提供的引用信息来回答这个问题。 首先,引用[1]提到DevEco Studio是专为鸿蒙应用开发打造的集成开发环境,基于IntelliJ IDEA Community开源版本,提供一站式开发平台。这应该作为定义的核心部分。 引用[2]补充说它是华为推出的针对OpenHarmony应用开发的IDE,集成了代码编辑、编译、调试等功能。需要强调这些功能,说明其用途。 引用[3]和[4]主要涉及教程和实战开发,可能不需要在定义中详细展开,但可以提到它支持多设备应用开发,符合鸿蒙生态的特点。 用户之前的问题涉及到配置文件路径和模拟器设置,但当前的问题集中在定义和用途,所以需要保持回答的简洁和针对性。需要确保回答结构清晰,分点说明,并符合中文回答的要求。 需要生成相关问题,可能涉及功能特点、环境搭建、与其他IDE的区别等。确保引用标注正确,例如引用[1]和[2]中的信息。 检查是否需要使用任何数学公式或代码块,但当前问题可能不需要,保持文字描述即可。最后确认所有引用标注正确,没有遗漏关键点。</think>### DevEco Studio 的定义与核心用途 --- #### 一、**定义** **HUAWEI DevEco Studio** 是华为官方推出的 **鸿蒙生态专属集成开发环境(IDE)**,基于 IntelliJ IDEA Community 开源版本深度定制[^1]。其核心定位是为鸿蒙操作系统(HarmonyOS 和 OpenHarmony)的 **应用开发** 与 **元服务开发** 提供全生命周期支持,覆盖代码编写、调试、测试到部署的全流程[^2]。 --- #### 二、**核心用途** 1. **鸿蒙应用开发** - 支持开发适配手机、平板、智慧屏、穿戴设备等多终端的 **全场景应用** - 提供 **HarmonyOS 模板库**,快速创建 Ability(Page Ability、Service Ability 等) - 集成 **ArkUI 框架**,简化声明式 UI 开发(如通过 `.ets` 文件实现跨设备布局) 2. **元服务(原子化服务)开发** - 实现 **免安装、轻量化服务** 的分发与运行 - 支持服务卡片(Service Widget)的 **动态化配置** 与 **跨设备流转**[^4] 3. **多设备协同开发** - 内置 **分布式模拟器**,支持多设备联调(如手机与手表联动) - 提供 **统一代码适配工具**,自动生成差异化资源文件 --- #### 三、**关键功能特性** | 功能模块 | 具体能力 | 技术亮点 | |------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------| | **代码开发** | - ArkTS/JS/Java 语言支持<br>- 实时语法检查与智能补全 | 深度集成 **ArkCompiler**,支持跨语言混合编程[^1] | | **调试工具** | - 分布式断点调试<br>- 跨设备日志追踪 | 支持 **HiLog 日志系统** 可视化过滤 | | **模拟器管理** | - 本地/远程设备模拟<br>- GPU 硬件加速渲染 | 可配置虚拟传感器(如 GPS、心率监测)[^4] | | **工程管理** | - 多设备工程模板<br>- 自动化签名与打包 | 支持 **HAP(Harmony Ability Package)** 动态部署 | --- #### 四、**典型应用场景示例** 1. **跨设备功能开发** ```typescript // 通过分布式能力调用其他设备摄像头 import camera from '@ohos.multimedia.camera'; let cameraManager = camera.getCameraManager(context); ``` - 代码自动同步到不同设备的 `config.json` 中声明权限[^3] 2. **服务卡片动态更新** ```json { "forms": [{ "name": "widget", "description": "This is a service widget.", "updateEnabled": true, // 启用动态更新 "scheduledUpdateTime": "10:30" }] } ``` --- ### 相关问题 1. 如何在 DevEco Studio 中配置鸿蒙应用的分布式能力? 2. ArkTS 与其他编程语言(如 Java)在鸿蒙开发中有何区别? 3. 使用 DevEco Studio 开发元服务需要哪些特殊配置? [^1]: 华为开发者文档《DevEco Studio 技术架构白皮书》 [^2]: OpenHarmony 应用开发指南(2023 版) [^3]: HarmonyOS 鸿蒙开发工具链规范 [^4]: 鸿蒙原子化服务设计与实践案例集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值