1# @ohos.app.ability.abilityLifecycleCallback (AbilityLifecycleCallback) 2 3The **AbilityLifecycleCallback** module defines the callbacks to receive lifecycle changes of [ApplicationContext](js-apis-inner-application-applicationContext.md). The callbacks include [onAbilityCreate](#abilitylifecyclecallbackonabilitycreate), [onWindowStageCreate](#abilitylifecyclecallbackonwindowstagecreate), [onWindowStageActive](#abilitylifecyclecallbackonwindowstageactive), [onWindowStageInactive](#abilitylifecyclecallbackonwindowstageinactive), [onWindowStageDestroy](#abilitylifecyclecallbackonwindowstagedestroy), [onAbilityDestroy](#abilitylifecyclecallbackonabilitydestroy), [onAbilityForeground](#abilitylifecyclecallbackonabilityforeground), [onAbilityBackground](#abilitylifecyclecallbackonabilitybackground), and [onAbilityContinue](#abilitylifecyclecallbackonabilitycontinue). 4 5> **NOTE** 6> 7> The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version. 8> The APIs of this module can be used only in the stage model. 9 10## Modules to Import 11 12```ts 13import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 14``` 15 16## AbilityLifecycleCallback.onAbilityCreate 17 18onAbilityCreate(ability: UIAbility): void; 19 20Called when an ability is created. 21 22**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 23 24**Parameters** 25 26 | Name| Type| Mandatory| Description| 27 | -------- | -------- | -------- | -------- | 28 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 29 30**Example** 31```ts 32import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 33 34let abilityLifecycleCallback: AbilityLifecycleCallback = { 35 onAbilityCreate(ability){ 36 console.log('AbilityLifecycleCallback onAbilityCreate.'); 37 } 38}; 39``` 40 41## AbilityLifecycleCallback.onWindowStageCreate 42 43onWindowStageCreate(ability: UIAbility, windowStage: window.WindowStage): void; 44 45Called when the window stage of an ability is created. 46 47**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 48 49**Parameters** 50 51 | Name| Type| Mandatory| Description| 52 | -------- | -------- | -------- | -------- | 53 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 54 | windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | Yes| **WindowStage** object.| 55 56**Example** 57```ts 58import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 59 60let abilityLifecycleCallback: AbilityLifecycleCallback = { 61 onWindowStageCreate(ability, windowStage){ 62 console.log('AbilityLifecycleCallback onWindowStageCreate.'); 63 } 64}; 65``` 66 67## AbilityLifecycleCallback.onWindowStageActive 68 69onWindowStageActive(ability: UIAbility, windowStage: window.WindowStage): void; 70 71Called when the window stage of an ability gains focus. 72 73**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 74 75**Parameters** 76 77 | Name| Type| Mandatory| Description| 78 | -------- | -------- | -------- | -------- | 79 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 80 | windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | Yes| **WindowStage** object.| 81 82**Example** 83```ts 84import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 85 86let abilityLifecycleCallback: AbilityLifecycleCallback = { 87 onWindowStageActive(ability, windowStage){ 88 console.log('AbilityLifecycleCallback onWindowStageActive.'); 89 } 90}; 91``` 92 93## AbilityLifecycleCallback.onWindowStageInactive 94 95onWindowStageInactive(ability: UIAbility, windowStage: window.WindowStage): void; 96 97Called when the window stage of an ability loses focus. 98 99**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 100 101**Parameters** 102 103 | Name| Type| Mandatory| Description| 104 | -------- | -------- | -------- | -------- | 105 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 106 | windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | Yes| **WindowStage** object.| 107 108**Example** 109```ts 110import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 111 112let abilityLifecycleCallback: AbilityLifecycleCallback = { 113 onWindowStageInactive(ability, windowStage){ 114 console.log('AbilityLifecycleCallback onWindowStageInactive.'); 115 } 116}; 117``` 118 119## AbilityLifecycleCallback.onWindowStageDestroy 120 121onWindowStageDestroy(ability: UIAbility, windowStage: window.WindowStage): void; 122 123Called when the window stage of an ability is destroyed. 124 125**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 126 127**Parameters** 128 129 | Name| Type| Mandatory| Description| 130 | -------- | -------- | -------- | -------- | 131 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 132 | windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | Yes| **WindowStage** object.| 133 134**Example** 135```ts 136import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 137 138let abilityLifecycleCallback: AbilityLifecycleCallback = { 139 onWindowStageDestroy(ability, windowStage){ 140 console.log('AbilityLifecycleCallback onWindowStageDestroy.'); 141 } 142}; 143``` 144 145## AbilityLifecycleCallback.onAbilityDestroy 146 147onAbilityDestroy(ability: UIAbility): void; 148 149Called when an ability is destroyed. 150 151**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 152 153**Parameters** 154 155 | Name| Type| Mandatory| Description| 156 | -------- | -------- | -------- | -------- | 157 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 158 159**Example** 160```ts 161import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 162 163let abilityLifecycleCallback: AbilityLifecycleCallback = { 164 onAbilityDestroy(ability){ 165 console.log('AbilityLifecycleCallback onAbilityDestroy.'); 166 } 167}; 168``` 169 170## AbilityLifecycleCallback.onAbilityForeground 171 172onAbilityForeground(ability: UIAbility): void; 173 174Called when an ability is switched from the background to the foreground. 175 176**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 177 178**Parameters** 179 180 | Name| Type| Mandatory| Description| 181 | -------- | -------- | -------- | -------- | 182 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 183 184**Example** 185```ts 186import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 187 188let abilityLifecycleCallback: AbilityLifecycleCallback = { 189 onAbilityForeground(ability){ 190 console.log('AbilityLifecycleCallback onAbilityForeground.'); 191 } 192}; 193``` 194 195## AbilityLifecycleCallback.onAbilityBackground 196 197onAbilityBackground(ability: UIAbility): void; 198 199Called when an ability is switched from the foreground to the background. 200 201**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 202 203**Parameters** 204 205 | Name| Type| Mandatory| Description| 206 | -------- | -------- | -------- | -------- | 207 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 208 209**Example** 210```ts 211import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 212 213let abilityLifecycleCallback: AbilityLifecycleCallback = { 214 onAbilityBackground(ability){ 215 console.log('AbilityLifecycleCallback onAbilityBackground.'); 216 } 217}; 218``` 219 220## AbilityLifecycleCallback.onAbilityContinue 221 222onAbilityContinue(ability: UIAbility): void; 223 224Called when an ability is continued on another device. 225 226**System capability**: SystemCapability.Ability.AbilityRuntime.AbilityCore 227 228**Parameters** 229 230 | Name| Type| Mandatory| Description| 231 | -------- | -------- | -------- | -------- | 232 | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | Yes| **Ability** object.| 233 234**Example** 235```ts 236import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 237 238let abilityLifecycleCallback: AbilityLifecycleCallback = { 239 onAbilityContinue(ability){ 240 console.log('AbilityLifecycleCallback onAbilityContinue.'); 241 } 242}; 243``` 244 245## Usage of AbilityLifecycleCallback 246 247**Example** 248GlobalContext.ts 249```ts 250// Construct a singleton object. 251export class GlobalContext { 252 private constructor() {} 253 private static instance: GlobalContext; 254 private _objects = new Map<string, Object>(); 255 256 public static getContext(): GlobalContext { 257 if (!GlobalContext.instance) { 258 GlobalContext.instance = new GlobalContext(); 259 } 260 return GlobalContext.instance; 261 } 262 263 getObject(value: string): Object | undefined { 264 return this._objects.get(value); 265 } 266 267 setObject(key: string, objectClass: Object): void { 268 this._objects.set(key, objectClass); 269 } 270} 271``` 272 273MyFirstAbility.ts 274```ts 275import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; 276import AbilityStage from '@ohos.app.ability.AbilityStage'; 277import UIAbility from '@ohos.app.ability.UIAbility'; 278import { GlobalContext } from '../GlobalContext' 279 280// Declare the ability lifecycle callbacks. A listener can be registered in applicationContext only after all the callbacks are configured. 281let abilityLifecycleCallback: AbilityLifecycleCallback = { 282 onAbilityCreate(ability){ 283 console.log('AbilityLifecycleCallback onAbilityCreate.'); 284 }, 285 onWindowStageCreate(ability, windowStage){ 286 console.log('AbilityLifecycleCallback onWindowStageCreate.'); 287 }, 288 onWindowStageActive(ability, windowStage){ 289 console.log('AbilityLifecycleCallback onWindowStageActive.'); 290 }, 291 onWindowStageInactive(ability, windowStage){ 292 console.log('AbilityLifecycleCallback onWindowStageInactive.'); 293 }, 294 onWindowStageDestroy(ability, windowStage){ 295 console.log('AbilityLifecycleCallback onWindowStageDestroy.'); 296 }, 297 onAbilityDestroy(ability){ 298 console.log('AbilityLifecycleCallback onAbilityDestroy.'); 299 }, 300 onAbilityForeground(ability){ 301 console.log('AbilityLifecycleCallback onAbilityForeground.'); 302 }, 303 onAbilityBackground(ability){ 304 console.log('AbilityLifecycleCallback onAbilityBackground.'); 305 }, 306 onAbilityContinue(ability){ 307 console.log('AbilityLifecycleCallback onAbilityContinue.'); 308 } 309}; 310 311export default class MyFirstAbility extends UIAbility { 312 onCreate() { 313 console.log('MyAbilityStage onCreate'); 314 // 1. Obtain applicationContext through the context attribute. 315 let applicationContext = this.context.getApplicationContext(); 316 // 2. Register the listener for the ability lifecycle changes through the applicationContext object. 317 try { 318 let lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback); 319 GlobalContext.getContext().setObject("lifecycleId", lifecycleId); 320 console.log(`registerAbilityLifecycleCallback lifecycleId: ${globalThis.lifecycleId}`); 321 } catch (paramError) { 322 console.error(`error: ${paramError.code}, ${paramError.message}`); 323 } 324 } 325} 326``` 327 328MySecondAbility.ts 329```ts 330import UIAbility from '@ohos.app.ability.UIAbility'; 331import { GlobalContext } from '../GlobalContext' 332 333export default class MySecondAbility extends UIAbility { 334 onDestroy() { 335 let applicationContext = this.context.getApplicationContext(); 336 let lifecycleId = GlobalContext.getContext().getObject("lifecycleId") as number; 337 // 3. Deregister the listener for the ability lifecycle changes through the applicationContext object. 338 applicationContext.off('abilityLifecycle', lifecycleId, (error) => { 339 if (error && error.code !== 0) { 340 console.error(`unregisterAbilityLifecycleCallback fail, error: ${JSON.stringify(error)}`); 341 } else { 342 console.log('unregisterAbilityLifecycleCallback success.'); 343 } 344 }); 345 } 346} 347``` 348