前言

应用生命周期管理是开发中的核心环节,了解Ability和页面的生命周期状态有助于合理管理资源。@pura/harmony-utilsLifecycleUtil 封装了生命周期监听方法,让开发者可以方便地感知应用状态变化。本文将从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);
});

五、注意事项

  1. 回调管理:务必在页面销毁时取消监听
  2. 主线程:回调在主线程执行,避免耗时操作
  3. 多次注册:避免重复注册同一回调
  4. 初始化依赖:使用前需确保 AppUtil.init() 已调用
  5. 回调引用:注册和取消需使用同一引用

六、常见问题

Q1: 回调没有触发怎么办?

检查 AppUtil.init() 是否已调用,以及回调引用是否正确保存。

Q2: 可以注册多个回调吗?

可以注册多个不同的回调函数,每个回调都会在对应生命周期时被调用。

Q3: onCreate和onDestroy什么时候触发?

onCreate 在Ability创建时触发,onDestroy 在Ability销毁时触发,通常各只触发一次。

Q4: LifecycleUtil和AppUtil前后台监听有什么区别?

功能类似,LifecycleUtil 提供更完整的生命周期回调(包括onCreate/onDestroy),而 AppUtil 仅提供前后台监听。

在这里插入图片描述

总结

LifecycleUtil 为应用生命周期管理提供了便捷的监听机制。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以在不同生命周期状态下执行相应的业务逻辑,如数据保存、资源释放等。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐