鸿蒙三方库 | harmony-utils之LifecycleUtil生命周期回调监听详解
·
前言
应用生命周期管理是开发中的核心环节,了解Ability和页面的生命周期状态有助于合理管理资源。@pura/harmony-utils 的 LifecycleUtil 封装了生命周期监听方法,让开发者可以方便地感知应用状态变化。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、LifecycleUtil核心API
LifecycleUtil 提供了以下生命周期监听方法:
| 方法 | 说明 | 参数 | 使用场景 |
|---|---|---|---|
onCreate(callback) |
监听Ability创建 | () => void | 初始化资源 |
onDestroy(callback) |
监听Ability销毁 | () => void | 释放资源 |
onForeground(callback) |
监听切到前台 | () => void | 恢复动画 |
onBackground(callback) |
监听切到后台 | () => void | 暂停动画 |
1.1 核心特性
- 简洁易用:封装复杂API为一行调用,降低使用门槛
- 类型安全:完整的TypeScript类型定义,编译期即可发现错误
- 异常处理:内置异常捕获机制,避免运行时崩溃
- 生命周期安全:支持注册和取消,避免内存泄漏
1.2 生命周期回调适用场景
| 回调 | 典型操作 | 注意事项 |
|---|---|---|
| onCreate | 初始化SDK、加载配置 | 仅触发一次 |
| onDestroy | 释放资源、断开连接 | 确保资源释放 |
| onForeground | 恢复动画、刷新数据 | 避免耗时操作 |
| onBackground | 暂停动画、保存草稿 | 快速执行 |
二、完整使用步骤
2.1 安装依赖
ohpm install @pura/harmony-utils
2.2 注册生命周期监听
import { LifecycleUtil } from '@pura/harmony-utils';
private foregroundCallback = () => {
this.result = '应用已切到前台';
};
private backgroundCallback = () => {
this.result = '应用已切到后台';
};
aboutToAppear() {
LifecycleUtil.onForeground(this.foregroundCallback);
LifecycleUtil.onBackground(this.backgroundCallback);
}
2.3 取消监听
aboutToDisappear() {
LifecycleUtil.offForeground(this.foregroundCallback);
LifecycleUtil.offBackground(this.backgroundCallback);
}

三、完整页面示例
import { LifecycleUtil } from '@pura/harmony-utils';
@Entry
@Component
struct LifecycleDemo {
@State result: string = '等待生命周期事件...';
private fgCb = () => { this.result = '前台回调触发'; };
private bgCb = () => { this.result = '后台回调触发'; };
aboutToAppear() {
LifecycleUtil.onForeground(this.fgCb);
LifecycleUtil.onBackground(this.bgCb);
}
aboutToDisappear() {
LifecycleUtil.offForeground(this.fgCb);
LifecycleUtil.offBackground(this.bgCb);
}
build() {
Column({ space: 12 }) {
Button('注册生命周期监听').width('100%').onClick(() => {
this.result = '监听已注册,切换应用触发';
});
Text(this.result).fontSize(14).fontColor('#333333')
}
.padding(16)
}
}
四、进阶用法
4.1 生命周期管理器封装
import { LifecycleUtil } from '@pura/harmony-utils';
class LifecycleManager {
private callbacks: Map<string, () => void> = new Map();
onForeground(key: string, callback: () => void) {
this.callbacks.set('fg_' + key, callback);
LifecycleUtil.onForeground(callback);
}
onBackground(key: string, callback: () => void) {
this.callbacks.set('bg_' + key, callback);
LifecycleUtil.onBackground(callback);
}
unregisterAll() {
this.callbacks.forEach((cb, key) => {
if (key.startsWith('fg_')) LifecycleUtil.offForeground(cb);
else LifecycleUtil.offBackground(cb);
});
this.callbacks.clear();
}
}
4.2 结合数据保存
import { LifecycleUtil, PreferencesUtil } from '@pura/harmony-utils';
LifecycleUtil.onBackground(() => {
PreferencesUtil.putString('last_page', this.currentPage);
});
五、注意事项
- 回调管理:务必在页面销毁时取消监听
- 主线程:回调在主线程执行,避免耗时操作
- 多次注册:避免重复注册同一回调
- 初始化依赖:使用前需确保
AppUtil.init()已调用 - 回调引用:注册和取消需使用同一引用
六、常见问题
Q1: 回调没有触发怎么办?
检查 AppUtil.init() 是否已调用,以及回调引用是否正确保存。
Q2: 可以注册多个回调吗?
可以注册多个不同的回调函数,每个回调都会在对应生命周期时被调用。
Q3: onCreate和onDestroy什么时候触发?
onCreate 在Ability创建时触发,onDestroy 在Ability销毁时触发,通常各只触发一次。
Q4: LifecycleUtil和AppUtil前后台监听有什么区别?
功能类似,LifecycleUtil 提供更完整的生命周期回调(包括onCreate/onDestroy),而 AppUtil 仅提供前后台监听。

总结
LifecycleUtil 为应用生命周期管理提供了便捷的监听机制。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以在不同生命周期状态下执行相应的业务逻辑,如数据保存、资源释放等。
本文基于
@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。
更多推荐



所有评论(0)