文档管理中心

@ohos.app.ability.abilityLifecycleCallback (UIAbility生命周期回调监听器)

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

UIAbility从创建到销毁过程其生命周期是动态变化的。AbilityLifecycleCallback模块提供监听UIAbility生命周期变化的能力,可用于统计每个UIAbility的运行时长、执行与UIAbility业务逻辑解耦的数据加载等场景。

说明

本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

本模块接口仅可在Stage模型下使用。

本模块接口只能监听进程内UIAbility生命周期变化。

使用说明

  1. 应用创建AbilityLifecycleCallback对象,并调用ApplicationContext.on('abilityLifecycle')接口注册UIAbility生命周期变化监听。
  2. 当UIAbility生命周期变化时,应用可以通过已注册的AbilityLifecycleCallback对象接收到UIAbility生命周期的变化通知。
  3. 当应用不需要监听UIAbility生命周期变化时,需要通过ApplicationContext.off('abilityLifecycle')接口取消监听。

导入模块

import { AbilityLifecycleCallback } from '@kit.AbilityKit';

AbilityLifecycleCallback

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityCreate

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityCreate(ability: UIAbility): void

在UIAbility的onCreate触发后回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageCreate

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageCreate(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility的onWindowStageCreate触发后回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageActive

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageActive(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility主窗获焦时触发回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageInactive

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageInactive(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility主窗失焦时触发回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageDestroy

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageDestroy(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility的onWindowStageDestroy触发后回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityDestroy

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityDestroy(ability: UIAbility): void

在UIAbility的onDestroy触发后回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityForeground

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityForeground(ability: UIAbility): void

在UIAbility的onForeground触发后回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityBackground

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityBackground(ability: UIAbility): void

在UIAbility的onBackground触发后回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityContinue

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityContinue(ability: UIAbility): void

在UIAbility的onContinue触发后回调。

元服务API:从API version 11开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityWillCreate12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityWillCreate?(ability: UIAbility): void

在UIAbility的onCreate触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageWillCreate12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageWillCreate?(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility的onWindowStageCreate触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageWillDestroy12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageWillDestroy?(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility的onWindowStageDestroy触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityWillForeground12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityWillForeground?(ability: UIAbility): void

在UIAbility的onForeground触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityWillDestroy12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityWillDestroy?(ability: UIAbility): void

在UIAbility的onDestroy触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityWillBackground12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityWillBackground?(ability: UIAbility): void

在UIAbility的onBackground触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onWillNewWant12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWillNewWant?(ability: UIAbility): void

在UIAbility的onNewWant触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onNewWant12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onNewWant?(ability: UIAbility): void

在UIAbility的onNewWant触发后回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityWillContinue12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityWillContinue?(ability: UIAbility): void

在UIAbility的onContinue触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageWillRestore12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageWillRestore?(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility的onWindowStageRestore触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onWindowStageRestore12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onWindowStageRestore?(ability: UIAbility, windowStage: window.WindowStage): void

在UIAbility的onWindowStageRestore触发后回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。
windowStage window.WindowStage 是 回调事件对应的UIAbility主窗管理器。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilityWillSaveState12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilityWillSaveState?(ability: UIAbility): void

在UIAbility的onSaveState触发前回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

onAbilitySaveState12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

onAbilitySaveState?(ability: UIAbility): void

在UIAbility的onSaveState触发后回调。

元服务API:从API version 12开始,该接口支持在元服务中使用。

系统能力:SystemCapability.Ability.AbilityRuntime.AbilityCore

参数:

展开
参数名 类型 必填 说明
ability UIAbility 是 回调事件对应的UIAbility对象。

示例:

参见AbilityLifecycleCallback使用示例。

AbilityLifecycleCallback使用示例

本示例展示了生命周期监听机制的部分使用场景:

  1. 在AbilityStage创建时注册监听。
  2. 在AbilityStage销毁时注销监听。
  3. 监听到对应UIAbility创建时加载资源,监听到对应UIAbility销毁时释放资源。
  4. 在UIAbility创建、销毁及前后台状态切换时,记录事件并向外发送通知。
// 以MyStage.ets文件为例,使用AbilityLifecycleCallback监听UIAbility生命周期
import { AbilityLifecycleCallback, AbilityStage, application, UIAbility } from "@kit.AbilityKit";
import { hilog } from '@kit.PerformanceAnalysisKit';
import { JSON } from "@kit.ArkTS";
import { window } from "@kit.ArkUI";
import { BusinessError } from "@kit.BasicServicesKit";

const DOMAIN = 0x0000;
const TAG = 'testTag';

function loadContent() {
  // 加载数据
}

function releaseContent() {
  // 释放数据
}

function recordAbilityEvent(abilityName: string) {
  // 执行打点
}

function publishEvent() {
  // 对外发布通知
}

let abilityLifecycleCallback: AbilityLifecycleCallback = {
  onAbilityCreate(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'onAbilityCreate: ' + ability.context.abilityInfo.name);
    // UIAbility事件打点记录
    recordAbilityEvent(ability.context.abilityInfo.name);
    // 模拟入口UIAbility创建时,加载资源对外发布通知
    if (ability.context.abilityInfo.name === 'EntryAbility') {
      loadContent();
      publishEvent();
    }
  },
  onWindowStageCreate(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageCreate.');
  },
  onWindowStageActive(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageActive.');
  },
  onWindowStageInactive(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageInactive.');
  },
  onWindowStageDestroy(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageDestroy.');
  },
  onAbilityDestroy(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'onAbilityDestroy: ' + ability.context.abilityInfo.name);
    recordAbilityEvent(ability.context.abilityInfo.name);
    // 模拟入口UIAbility销毁时,释放资源
    if (ability.context.abilityInfo.name === 'EntryAbility') {
      releaseContent();
      publishEvent();
    }
  },
  onAbilityForeground(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityForeground.');
    recordAbilityEvent(ability.context.abilityInfo.name);
    if (ability.context.abilityInfo.name === 'EntryAbility') {
      publishEvent();
    }
  },
  onAbilityBackground(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityBackground.');
    recordAbilityEvent(ability.context.abilityInfo.name);
    if (ability.context.abilityInfo.name === 'EntryAbility') {
      publishEvent();
    }
  },
  onAbilityContinue(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityContinue.');
  },
  onNewWant(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onNewWant');
  },
  onWillNewWant(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWillNewWant');
  },
  onAbilityWillCreate(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillCreate');
  },
  onWindowStageWillCreate(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageWillCreate');
  },
  onWindowStageWillDestroy(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageWillDestroy');
  },
  onAbilityWillDestroy(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillDestroy');
  },
  onAbilityWillForeground(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillForeground');
  },
  onAbilityWillBackground(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillBackground');
  },
  onAbilityWillContinue(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillContinue.');
  },
  onWindowStageWillRestore(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageWillRestore.');
  },
  onWindowStageRestore(ability: UIAbility, windowStage: window.WindowStage) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageRestore.');
  },
  onAbilityWillSaveState(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillSaveState.');
  },
  onAbilitySaveState(ability: UIAbility) {
    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilitySaveState.');
  }
};

let lifecycleId = -1; // 保存监听id

export default class MyStage extends AbilityStage {
  onCreate(): void {
    hilog.info(DOMAIN, TAG, 'AbilityStage onCreate')

    // AbilityStage创建时注册UIAbility生命周期监听,并把监听id保存起来
    try {
      let applicationContext = application.getApplicationContext();
      lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback);
    } catch (e) {
      hilog.error(DOMAIN, TAG, `register abilityLifecycle failed: ${JSON.stringify(e)}`);
    }
  }

  onDestroy(): void {
    // AbilityStage销毁时取消UIAbility生命周期监听注册
    let applicationContext = application.getApplicationContext();
    applicationContext.off('abilityLifecycle', lifecycleId).catch((e: BusinessError) => {
      hilog.error(DOMAIN, TAG, `unregister abilityLifecycle failed: ${JSON.stringify(e)}`);
    });
  }
}
// 以EntryAbility.ets为例,展示应用入口UIAbility
import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';

const DOMAIN = 0x0000;
const TAG = 'testTag';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
    hilog.info(DOMAIN, TAG, 'EntryAbility onCreate');
  }

  onDestroy(): void {
    hilog.info(DOMAIN, TAG, 'EntryAbility onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // 主窗创建
    hilog.info(DOMAIN, TAG, 'EntryAbility onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        hilog.error(DOMAIN, TAG, 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
        return;
      }
      hilog.info(DOMAIN, TAG, 'Succeeded in loading the content.');
    });
  }

  onWindowStageDestroy(): void {
    // 主窗销毁
    hilog.info(DOMAIN, TAG, 'EntryAbility onWindowStageDestroy');
  }

  onForeground(): void {
    // UIAbility切换到前台
    hilog.info(DOMAIN, TAG, 'EntryAbility onForeground');
  }

  onBackground(): void {
    // UIAbility切换到后台
    hilog.info(DOMAIN, TAG, 'EntryAbility  onBackground');
  }
}