谈及HarmonyOS Next中的生命周期有几种情况:(1)应用进程的生命周期;(2)UIAbility和UI组件的生命周期;(3)页面和自定义组件的生命周期。
一、应用进程的生命周期
应用进程的生命周期是操作系统层面,管理应用进程的创建、驻留和销毁。在应用进程生命周期中,包含一下几个环节:
- 前台:应用有可见的UI界面。
- 后台:应用界面不可见,但进程仍保留在内存中,可以执行受限的后台任务。
- 挂起:应用进程处于"冻结"状态,暂停执行,但保留内存数据,以便快速恢复。
- 终止:系统为释放资源,彻底终止应用进程。
二、UIAbility的生命周期
UIAbility是包含UI界面的应用组件,是应用的"窗口",是应用的显示界面。其生命周期由UIAbilityContext和AbilityStage中的回调方法体现。核心的生命周期方法包括:
| 方法 | 描述 |
|---|---|
| onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) | UIAbility创建实例时调用,用于初始化必要的资源,例如窗口设置等。在这个阶段中,窗口还未被创建,此时不必执行UI相关的操作 |
| onWindowStageCreate(windowStage: window.WindowStage) | UIAbility创建主窗口后调用,用于加载UI界面(windowStage.loadContent),设置窗口的监听事件 |
| onForeground() | UIAbility从后台返回前台并获得关注焦点时调用 |
| onBackground() | UIAbility从前台失去焦点,进入后台不可见状态时调用 |
| onWindowStageDestroy() | UIAbility的主窗口即将销毁时调用,用于清理窗口的相关资源,移除UI组件 |
| onDestroy() | UIAbility实例销毁前调用,执行最终的资源清理和状态的保存 |

图1 UIAbility的生命周期
UIAbility的生命周期包括如下几个状态:
UNINITIALIZED :onCreate 之前的初始状态。
CREATE (& WINDOW_STAGE_CREATE) :UIAbility被创建,其 UI 窗口已设置好,准备显示。
FOREGROUND :UIAbility 可见并可交互。这是用户使用的活跃状态。
BACKGROUND :UIAbility 不再可见,但仍在后台运行。应该在此处暂停非核心操作。
STOP (&WINDOW_STAGE_DESTROY & DESTROY):UIAbility 即将被销毁。应清理所有资源。
当在DevEco Studio创建一个新的项目模块时,会自动创建一个默认的UIAbility,默认会命名为"模块名"下面展示了entry模块的UIAbility,命名为EntryAbility,代码示例如下:
typescript
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
try {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
} catch (err) {
hilog.error(DOMAIN, 'testTag', 'Failed to set colorMode. Cause: %{public}s', JSON.stringify(err));
}
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
return;
}
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground');
}
}
测试上述的UIAbility,启动应用,并从后退按钮,将应用进入后台,注意此时,应用并没有关闭。运行的日志如图2所示:

图2 运行的日志
三、页面和自定义组件的生命周期
页面是基于@Component装饰的ArkUI组件。其生命周期由装饰器@Entry、@Component以及一系列生命周期函数来管理。其生命周期由视图栈相关。核心的生命周期方法如下表所示:
| 方法 | 描述 |
|---|---|
| aboutToAppear() | 在自定义组件即将出现时调用,具体时机是在创建自定义组件的新实例后,在执行其build()函数之前。调用一次。 |
| build() | 使用ArkUI提供的声明式语法来描述组件的UI布局和结构。每次渲染会被调用,可调用多次。 |
| onDidBuild() | 每次build执行完成后。用于监听组件的每次构建完成。可以处理每次UI渲染完成后执行一些操作。渲染后的操作,可以调用多次。 |
| onPageShow() | 当页面显示时,会触发当前页面内所有自定义组件的onPageShow生命周期。可以调用多次 |
| onPageHide() | 页面每次隐藏时触发,例如跳转到其他页面或进入后台。调用多次。 |
| onBackPress() | 当用户点击返回按钮时触发。可调用多次。 |
| aboutToDisappear() | 组件销毁或隐藏时,子组件先于父组件,调用一次。通常用于释放资源、取消订阅 |
| 页面和自定义组件的生命周期如图3所示: | |
![]() |
图3 页面的生命周期
在上述创建的项目模块编辑的Index.ets页面的代码内容如下:
typescript
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
aboutToAppear() {
console.log("Index页面:aboutToAppear")
}
onPageShow(){
console.log("Index页面:onPageShow")
}
onBackPress() {
console.log("Index页面:onBackPress")
}
onPageHide() {
console.log("Index页面:onPageHide")
}
aboutToDisappear() {
console.log("Index页面:aboutToDisappear")
}
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(() => {
this.message = 'Welcome';
})
}
.height('100%')
.width('100%')
}
}
再次运行该项目模块,然后点击后退按钮,这时日志的运行如图4所示:

图4 运行的日志
参考文献
HarmonyOS应用生命周期解析:从启动到销毁的全程管理 https://developer.huawei.com/consumer/cn/blog/topic/03196383530118205 【EB/OL】
