HarmonyOS NEXT鸿蒙开发:UIAbility组件(EntryAbility.ets) 作者:马育民 • 2024-11-09 23:04 • 阅读:10009 # 介绍 [官方指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/uiability-overview-V5 "官方指南") UIAbility组件是一种 **包含 UI** 的应用组件,主要用于 **和用户交互**。 ### 设计理念 - 原生支持应用组件级的跨端迁移和多端协同。 - 支持多设备和多窗口形态。 # 文件位置 创建工程后,自动生成 `EntryAbility` 文件,该文件就是UIAbility组件,在下面目录: ``` src/main/ets/entryability/EntryAbility.ets ``` ### 源码 除了 `onWindowStageCreate()` 方法以外,其他都是空方法,只是打印日志 ``` import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); } onDestroy(): void { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); } onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); windowStage.loadContent('pages/Index', (err) => { if (err.code) { hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; } hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); }); } onWindowStageDestroy(): void { // Main window is destroyed, release UI related resources hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); } onForeground(): void { // Ability has brought to foreground hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); } onBackground(): void { // Ability has back to background hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); } } ``` # 生命周期 [官网指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/uiability-lifecycle-V5 "官网指南") [官网API](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-ability-uiability-V5 "官网API") 当用户 **打开**、**切换** 和 **返回** 到应用时,应用中的 [UIAbility](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-ability-uiability-V5 "UIAbility") 实例会在其 **生命周期的不同状态之间转换**。 UIAbility类提供了一系列回调,**通过这些回调可以知道某个状态发生改变**,如:UIAbility实例的创建、销毁、前后台切换 ## 状态 生命周期包括四个状态: - Create - Foreground - Background - Destroy 如下图: [![](/upload/0/0/1GWzr6YSfv.png)](/upload/0/0/1GWzr6YSfv.png) ### Create状态 Create状态为在应用加载过程中,UIAbility实例创建完成时触发,系统会调用onCreate()回调。可以在该回调中进行页面初始化操作,例如变量定义资源加载等,用于后续的UI展示 ### WindowStageCreate状态 UIAbility实例创建完成之后,在进入 `Foreground` 之前,系统会创建一个 `WindowStage`。 `WindowStage` 创建完成后会进入 `onWindowStageCreate()` 回调,可以在该回调中设置 **UI加载**、设置WindowStage的事件订阅。 如上面源码中,通过下面代码自动加载 `pages/Index.ets` 页面 ``` windowStage.loadContent('pages/Index' ... ``` ### WindowStageDestroy状态 在UIAbility实例销毁之前,则会先进入`onWindowStageDestroy()`回调 ### WindowStageCreate和WindowStageDestroy状态时序图 [![](/upload/0/0/1GW102kPyxq.png)](/upload/0/0/1GW102kPyxq.png) ### Foreground状态 `Foreground` 在UIAbility实例 **切换至前台时触发** ,执行 `onForeground()` 回调 #### 应用场景 切换至前台时触发,可以在 `onForeground()` 回调中 **申请系统需要的资源** 例如:应用在使用过程中需要使用 **定位** 时,可以在 `onForeground()` 回调中 **开启定位** 功能,从而获取到当前的位置信息。 ### Background状态 `Background` 状态在UIAbility实例 **切换至后台时触发**,执行 `onBackground()` 回调 #### 应用场景 切换至后台时候触发,可以在 `onBackground()` 回调中 **释放无用的资源**,或者在此回调中 **执行较为耗时的操作**,例如状态保存等。 当应用切换到后台状态,可以在 `onBackground()` 回调中 **停止定位功能**,以节省系统的资源消耗。 ### Destroy状态 Destroy状态在UIAbility实例销毁时触发。可以在 `onDestroy()` 回调中进行 **系统资源的释放**、**数据的保存** 等操作。 # 启动模式 一个应用可以包含 **一个** 或 **多个UIAbility组件**。 **每一个UIAbility组件实例** 都会在 **任务列表中显示一个对应的任务**。 类似微信小程序,有的微信小程序,在任务列表中,可以看到微信任务、小程序任务,如下图: [![](/upload/0/0/1GWuOGi92O.jpg)](/upload/0/0/1GWuOGi92O.jpg) ### 如何选择单个、多个UIAbility组件 建议如下: - 如果开发者希望在 **任务视图** 中 **看到 一个任务**,建议使用 `一个UIAbility+多个页面` 的方式,可以避免不必要的资源加载。 - 如果开发者希望在 **任务视图** 中 **看到 多个任务**,或者需要 **同时开启多个窗口**,建议使用 **多个UIAbility**实现不同的功能。 ### 配置位置 在 [module.json5的launchType标签中配置](/show_1GWwjeI0Fk.html#launchType "aaa") 原文出处:http://malaoshi.top/show_1GWwYNaWf2.html