使用的核心APIApplicationContext.on(type: ‘abilityLifecycle’, callback: AbilityLifecycleCallback): number;核心代码解释生命周期的监听只需要调用该接口传入对象参数即可,这里主要体现想要监听ability的onCreate生命周期,日常的操作都是基于ability做的,导致如果在ability里增加这个监听操作,无法监听到ability的onCreate的生命周期,这里引出AbilityStage解决该问题。核心代码如下://src/main/ets/entryability/StageAbility.ets import AbilityStage from '@ohos.app.ability.AbilityStage'; import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; // 声明ability生命周期回调,需配置所有回调后才可以在applicationContext注册 let abilityLifecycleCallback:AbilityLifecycleCallback = { onAbilityCreate(ability){ console.warn(`AbilityLifecycleCallback onAbilityCreate.javaleetest ability is ${JSON.stringify(ability)}`); }, onWindowStageCreate(ability, windowStage){ console.warn(`AbilityLifecycleCallback onWindowStageCreate.javaleetest ability is ${JSON.stringify(ability)}, windowStage is is ${JSON.stringify(windowStage)}`); }, onWindowStageActive(ability, windowStage){ console.warn(`AbilityLifecycleCallback onWindowStageActive.javaleetest ability is ${JSON.stringify(ability)}, windowStage is is ${JSON.stringify(windowStage)}`); }, onWindowStageInactive(ability, windowStage){ console.warn(`AbilityLifecycleCallback onWindowStageInactive.javaleetest ability is ${JSON.stringify(ability)}, windowStage is is ${JSON.stringify(windowStage)}`); }, onWindowStageDestroy(ability, windowStage){ // console.warn(`AbilityLifecycleCallback onWindowStageDestroy.javaleetest ability is ${JSON.stringify(ability)}, windowStage is is ${JSON.stringify(windowStage)}`); }, onAbilityDestroy(ability){ console.warn(`AbilityLifecycleCallback onAbilityDestroy.javaleetest ability is ${JSON.stringify(ability)}`); }, onAbilityForeground(ability){ console.warn(`AbilityLifecycleCallback onAbilityForeground.javaleetest ability is ${JSON.stringify(ability)}`); }, onAbilityBackground(ability){ // console.warn(`AbilityLifecycleCallback onAbilityBackground.javaleetest ability is ${JSON.stringify(ability)}`); }, onAbilityContinue(ability){ console.warn(`AbilityLifecycleCallback onAbilityContinue.javaleetest ability is ${JSON.stringify(ability)}`); } }; export default class StageAbility extends AbilityStage{ public static lifecycleId : number; onCreate() { // 1.通过context属性获取applicationContext let applicationContext = this.context.getApplicationContext(); // 2.通过applicationContext注册监听应用内生命周期 try { StageAbility.lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback); console.info(`registerAbilityLifecycleCallback lifecycleId: ${StageAbility.lifecycleId}`); } catch (paramError) { console.error(`error: ${paramError.code}, ${paramError.message}`); } } };//src/main/ets/entryability1/EntryAbility1.ets import AbilityConstant from '@ohos.app.ability.AbilityConstant'; import hilog from '@ohos.hilog'; import UIAbility from '@ohos.app.ability.UIAbility'; import Want from '@ohos.app.ability.Want'; import window from '@ohos.window'; import StageAbility from '../entryability/StageAbility'; export default class EntryAbility1 extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { hilog.info(0x0000, 'AbilityLifecycleCallback', '%{public}s', 'AbilityLifecycleCallback - Ability onCreate'); } onDestroy() { //应用退出时,通过监听创建时的返回值lifecycleId结束对ability生命周期的监听, let applicationContext = this.context.getApplicationContext(); applicationContext.off("abilityLifecycle",StageAbility.lifecycleId) hilog.info(0x0000, 'AbilityLifecycleCallback', '%{public}s', 'Ability onDestroy'); } onWindowStageCreate(windowStage: window.WindowStage) { // Main window is created, set main page for this ability hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); windowStage.loadContent('pages/Index', (err, data) => { if (err.code) { hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; } hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); }); } onWindowStageDestroy() { // Main window is destroyed, release UI related resources hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); } onForeground() { // Ability has brought to foreground hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); } onBackground() { // Ability has back to background hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); } }总结:主要难点在于:AbilityStage不是经常用到,在应用中尝试对整体进行控制时,可以参考Stage模型所具备的上下级特征,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/stage-model-development-overview-0000001427744552-V2实现效果注明适配的版本信息IDE:DevEco Studio 4.0.3.600SDK:HarmoneyOS 4.0.10.11
使用的核心API
ApplicationContext.on(type: ‘abilityLifecycle’, callback: AbilityLifecycleCallback): number;
核心代码解释
生命周期的监听只需要调用该接口传入对象参数即可,这里主要体现想要监听ability的onCreate生命周期,日常的操作都是基于ability做的,导致如果在ability里增加这个监听操作,无法监听到ability的onCreate的生命周期,这里引出AbilityStage解决该问题。
核心代码如下:
总结:
实现效果
注明适配的版本信息