HarmonyOS 鸿蒙Next中har包中监听ability生命周期

HarmonyOS 鸿蒙Next中har包中监听ability生命周期

import { BusinessError } from "@kit.BasicServicesKit";
import { AbilityLifecycleCallback } from "@kit.AbilityKit";
import { window } from "@kit.ArkUI";

@Component
export struct MainPage {
  @State message: string = 'Hello World';

  // 定义生命周期ID
  lifecycleId: number = -1;

  aboutToAppear(): void {
    // 定义生命周期回调对象
    let abilityLifecycleCallback: AbilityLifecycleCallback = {
      // 当UIAbility创建时被调用
      onAbilityCreate(uiAbility) {
        console.log('onAbilityCreate');
      },
      // 当窗口创建时被调用
      onWindowStageCreate(uiAbility, windowStage: window.WindowStage) {
        console.log('onWindowStageCreate');
      },
      // 当窗口处于活动状态时被调用
      onWindowStageActive(uiAbility, windowStage: window.WindowStage) {
        console.log('onWindowStageActive');
      },
      // 当窗口处于非活动状态时被调用
      onWindowStageInactive(uiAbility, windowStage: window.WindowStage) {
        console.log('onWindowStageInactive');
      },
      // 当窗口被销毁时被调用
      onWindowStageDestroy(uiAbility, windowStage: window.WindowStage) {
        console.log('onWindowStageDestroy');
      },
      // 当UIAbility被销毁时被调用
      onAbilityDestroy(uiAbility) {
        console.log('onAbilityDestroy');
      },
      // 当UIAbility从后台转到前台时触发回调
      onAbilityForeground(uiAbility) {
        console.log('onAbilityForeground');
      },
      // 当UIAbility从前台转到后台时触发回调
      onAbilityBackground(uiAbility) {
        console.log('onAbilityBackground');
      },
      // 当UIAbility迁移时被调用
      onAbilityContinue(uiAbility) {
        console.log('onAbilityContinue');
      }
    };
    // 获取应用上下文
    let applicationContext = getContext(this).getApplicationContext();
    try {
      // 注册应用内生命周期回调
      this.lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback);
    } catch (err) {
      let code = (err as BusinessError).code;
      let message = (err as BusinessError).message;
      console.error(`Failed to register applicationContext. Code is ${code}, message is ${message}`);
    }
  }

  aboutToDisappear(): void {
    // 获取应用上下文
    let applicationContext = getContext(this).getApplicationContext();
    try {
      // 取消应用内生命周期回调
      applicationContext.off('abilityLifecycle', this.lifecycleId);
    } catch (err) {
      let code = (err as BusinessError).code;
      let message = (err as BusinessError).message;
      console.error( `Failed to unregister applicationContext. Code is ${code}, message is ${message}`);
    }
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize($r('app.float.page_text_font_size'))
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.message = 'Welcome';
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next中har包中监听ability生命周期的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,har包内可通过UIAbility生命周期回调方法监听ability状态变化。主要包括onCreateonWindowStageCreateonForegroundonBackgroundonDestroy。开发者需在对应ability的代码文件中重写这些方法,实现自定义逻辑。

更多关于HarmonyOS 鸿蒙Next中har包中监听ability生命周期的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,通过AbilityLifecycleCallback接口可以监听UIAbility的生命周期事件。代码中通过applicationContext.on('abilityLifecycle', callback)注册回调,并在aboutToDisappear中通过off方法取消注册,确保资源正确释放。生命周期事件包括UIAbility创建、销毁、前后台切换以及窗口阶段变化等,适用于在HAR包中统一管理跨组件的生命周期逻辑。注意异常处理,避免因注册失败导致应用崩溃。

回到顶部