• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.app.ability.abilityLifecycleCallback (UIAbility生命周期回调监听器)
2<!--Kit: Ability Kit-->
3<!--Subsystem: Ability-->
4<!--Owner: @wkljy; @xuzhihao666-->
5<!--Designer: @ccllee1-->
6<!--Tester: @lixueqing513-->
7<!--Adviser: @huipeizi-->
8
9[UIAbility](js-apis-app-ability-uiAbility.md)从创建到销毁过程其生命周期是动态变化的。AbilityLifecycleCallback模块提供监听[UIAbility](js-apis-app-ability-uiAbility.md)生命周期变化的能力,可用于统计每个UIAbility的运行时长、执行与UIAbility业务逻辑解耦的数据加载等场景。
10
11> **说明:**
12>
13> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14>
15> 本模块接口仅可在Stage模型下使用。
16>
17> 本模块接口只能监听进程内UIAbility生命周期变化。
18
19## 使用说明
20
211. 应用创建AbilityLifecycleCallback对象,并调用[ApplicationContext.on('abilityLifecycle')](js-apis-inner-application-applicationContext.md#applicationcontextonabilitylifecycle)接口注册UIAbility生命周期变化监听。
222. 当UIAbility生命周期变化时,应用可以通过已注册的AbilityLifecycleCallback对象接收到UIAbility生命周期的变化通知。
233. 当应用不需要监听UIAbility生命周期变化时,需要通过[ApplicationContext.off('abilityLifecycle')](js-apis-inner-application-applicationContext.md#applicationcontextoffabilitylifecycle)接口取消监听。
24
25## 导入模块
26
27```ts
28import { AbilityLifecycleCallback } from '@kit.AbilityKit';
29```
30
31## AbilityLifecycleCallback
32
33### onAbilityCreate
34
35onAbilityCreate(ability: UIAbility): void
36
37在UIAbility的[onCreate](js-apis-app-ability-uiAbility.md#oncreate)触发后回调。
38
39**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
40
41**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
42
43**参数:**
44
45  | 参数名 | 类型 | 必填 | 说明 |
46  | -------- | -------- | -------- | -------- |
47  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
48
49**示例:**
50
51参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
52
53### onWindowStageCreate
54
55onWindowStageCreate(ability: UIAbility, windowStage: window.WindowStage): void
56
57在UIAbility的[onWindowStageCreate](js-apis-app-ability-uiAbility.md#onwindowstagecreate)触发后回调。
58
59**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
60
61**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
62
63**参数:**
64
65  | 参数名 | 类型 | 必填 | 说明 |
66  | -------- | -------- | -------- | -------- |
67  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
68  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
69
70**示例:**
71
72参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
73
74### onWindowStageActive
75
76onWindowStageActive(ability: UIAbility, windowStage: window.WindowStage): void
77
78在UIAbility主窗获焦时触发回调。
79
80**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
81
82**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
83
84**参数:**
85
86  | 参数名 | 类型 | 必填 | 说明 |
87  | -------- | -------- | -------- | -------- |
88  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
89  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
90
91**示例:**
92
93参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
94
95### onWindowStageInactive
96
97onWindowStageInactive(ability: UIAbility, windowStage: window.WindowStage): void
98
99在UIAbility主窗失焦时触发回调。
100
101**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
102
103**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
104
105**参数:**
106
107  | 参数名 | 类型 | 必填 | 说明 |
108  | -------- | -------- | -------- | -------- |
109  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
110  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
111
112**示例:**
113
114参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
115
116### onWindowStageDestroy
117
118onWindowStageDestroy(ability: UIAbility, windowStage: window.WindowStage): void
119
120在UIAbility的[onWindowStageDestroy](js-apis-app-ability-uiAbility.md#onwindowstagedestroy)触发后回调。
121
122**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
123
124**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
125
126**参数:**
127
128  | 参数名 | 类型 | 必填 | 说明 |
129  | -------- | -------- | -------- | -------- |
130  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象 |
131  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
132
133**示例:**
134
135参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
136
137### onAbilityDestroy
138
139onAbilityDestroy(ability: UIAbility): void
140
141在UIAbility的[onDestroy](js-apis-app-ability-uiAbility.md#ondestroy)触发后回调。
142
143**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
144
145**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
146
147**参数:**
148
149  | 参数名 | 类型 | 必填 | 说明 |
150  | -------- | -------- | -------- | -------- |
151  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
152
153**示例:**
154
155参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
156
157### onAbilityForeground
158
159onAbilityForeground(ability: UIAbility): void
160
161在UIAbility的[onForeground](js-apis-app-ability-uiAbility.md#onforeground)触发后回调。
162
163**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
164
165**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
166
167**参数:**
168
169  | 参数名 | 类型 | 必填 | 说明 |
170  | -------- | -------- | -------- | -------- |
171  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
172
173**示例:**
174
175参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
176
177### onAbilityBackground
178
179onAbilityBackground(ability: UIAbility): void
180
181在UIAbility的[onBackground](js-apis-app-ability-uiAbility.md#onbackground)触发后回调。
182
183**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
184
185**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
186
187**参数:**
188
189  | 参数名 | 类型 | 必填 | 说明 |
190  | -------- | -------- | -------- | -------- |
191  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
192
193**示例:**
194
195参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
196
197### onAbilityContinue
198
199onAbilityContinue(ability: UIAbility): void
200
201在UIAbility的[onContinue](js-apis-app-ability-uiAbility.md#oncontinue)触发后回调。
202
203**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
204
205**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
206
207**参数:**
208
209  | 参数名 | 类型 | 必填 | 说明 |
210  | -------- | -------- | -------- | -------- |
211  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
212
213**示例:**
214
215参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
216
217### onAbilityWillCreate<sup>12+</sup>
218
219onAbilityWillCreate?(ability: UIAbility): void
220
221在UIAbility的[onCreate](js-apis-app-ability-uiAbility.md#oncreate)触发前回调。
222
223**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
224
225**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
226
227**参数:**
228
229  | 参数名 | 类型 | 必填 | 说明 |
230  | -------- | -------- | -------- | -------- |
231  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
232
233**示例:**
234
235参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
236
237### onWindowStageWillCreate<sup>12+</sup>
238
239onWindowStageWillCreate?(ability: UIAbility, windowStage: window.WindowStage): void
240
241在UIAbility的[onWindowStageCreate](js-apis-app-ability-uiAbility.md#onwindowstagecreate)触发前回调。
242
243**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
244
245**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
246
247**参数:**
248
249  | 参数名 | 类型 | 必填 | 说明 |
250  | -------- | -------- | -------- | -------- |
251  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
252  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
253
254**示例:**
255
256参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
257
258### onWindowStageWillDestroy<sup>12+</sup>
259
260onWindowStageWillDestroy?(ability: UIAbility, windowStage: window.WindowStage): void
261
262在UIAbility的[onWindowStageDestroy](js-apis-app-ability-uiAbility.md#onwindowstagedestroy)触发前回调。
263
264**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
265
266**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
267
268**参数:**
269
270  | 参数名 | 类型 | 必填 | 说明 |
271  | -------- | -------- | -------- | -------- |
272  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
273  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
274
275**示例:**
276
277参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
278
279### onAbilityWillForeground<sup>12+</sup>
280
281onAbilityWillForeground?(ability: UIAbility): void
282
283在UIAbility的[onForeground](js-apis-app-ability-uiAbility.md#onforeground)触发前回调。
284
285**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
286
287**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
288
289**参数:**
290
291  | 参数名 | 类型 | 必填 | 说明 |
292  | -------- | -------- | -------- | -------- |
293  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
294
295**示例:**
296
297参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
298
299### onAbilityWillDestroy<sup>12+</sup>
300
301onAbilityWillDestroy?(ability: UIAbility): void
302
303在UIAbility的[onDestroy](js-apis-app-ability-uiAbility.md#ondestroy)触发前回调。
304
305**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
306
307**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
308
309**参数:**
310
311  | 参数名 | 类型 | 必填 | 说明 |
312  | -------- | -------- | -------- | -------- |
313  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
314
315**示例:**
316
317参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
318
319### onAbilityWillBackground<sup>12+</sup>
320
321onAbilityWillBackground?(ability: UIAbility): void
322
323在UIAbility的[onBackground](js-apis-app-ability-uiAbility.md#onbackground)触发前回调。
324
325**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
326
327**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
328
329**参数:**
330
331  | 参数名 | 类型 | 必填 | 说明 |
332  | -------- | -------- | -------- | -------- |
333  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
334
335**示例:**
336
337参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
338
339### onWillNewWant<sup>12+</sup>
340
341onWillNewWant?(ability: UIAbility): void
342
343在UIAbility的[onNewWant](js-apis-app-ability-uiAbility.md#onnewwant)触发前回调。
344
345**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
346
347**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
348
349**参数:**
350
351  | 参数名 | 类型 | 必填 | 说明 |
352  | -------- | -------- | -------- | -------- |
353  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
354
355**示例:**
356
357参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
358
359### onNewWant<sup>12+</sup>
360
361onNewWant?(ability: UIAbility): void
362
363在UIAbility的[onNewWant](js-apis-app-ability-uiAbility.md#onnewwant)触发后回调。
364
365**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
366
367**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
368
369**参数:**
370
371  | 参数名 | 类型 | 必填 | 说明 |
372  | -------- | -------- | -------- | -------- |
373  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
374
375**示例:**
376
377参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
378
379### onAbilityWillContinue<sup>12+</sup>
380
381onAbilityWillContinue?(ability: UIAbility): void
382
383在UIAbility的[onContinue](js-apis-app-ability-uiAbility.md#oncontinue)触发前回调。
384
385**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
386
387**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
388
389**参数:**
390
391  | 参数名 | 类型 | 必填 | 说明 |
392  | ------ | ------ | ------ | ------ |
393  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
394
395**示例:**
396
397参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
398
399### onWindowStageWillRestore<sup>12+</sup>
400
401onWindowStageWillRestore?(ability: UIAbility, windowStage: window.WindowStage): void
402
403在UIAbility的[onWindowStageRestore](js-apis-app-ability-uiAbility.md#onwindowstagerestore)触发前回调。
404
405**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
406
407**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
408
409**参数:**
410
411  | 参数名 | 类型 | 必填 | 说明 |
412  | ------ | ------ | ------ | ------ |
413  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
414  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
415
416**示例:**
417
418参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
419
420### onWindowStageRestore<sup>12+</sup>
421
422onWindowStageRestore?(ability: UIAbility, windowStage: window.WindowStage): void
423
424在UIAbility的[onWindowStageRestore](js-apis-app-ability-uiAbility.md#onwindowstagerestore)触发后回调。
425
426**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
427
428**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
429
430**参数:**
431
432  | 参数名 | 类型 | 必填 | 说明 |
433  | ------ | ------ | ------ | ------ |
434  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
435  | windowStage | [window.WindowStage](../apis-arkui/arkts-apis-window-WindowStage.md) | 是 | 回调事件对应的UIAbility主窗管理器。 |
436
437**示例:**
438
439参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
440
441### onAbilityWillSaveState<sup>12+</sup>
442
443onAbilityWillSaveState?(ability: UIAbility): void
444
445在UIAbility的[onSaveState](js-apis-app-ability-uiAbility.md#onsavestate)触发前回调。
446
447**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
448
449**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
450
451**参数:**
452
453  | 参数名 | 类型 | 必填 | 说明 |
454  | ------ | ------ | ------ | ------ |
455  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
456
457**示例:**
458
459参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
460
461### onAbilitySaveState<sup>12+</sup>
462
463onAbilitySaveState?(ability: UIAbility): void
464
465在UIAbility的[onSaveState](js-apis-app-ability-uiAbility.md#onsavestate)触发后回调。
466
467**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
468
469**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
470
471**参数:**
472
473  | 参数名 | 类型 | 必填 | 说明 |
474  | ------ | ------ | ------ | ------ |
475  | ability | [UIAbility](js-apis-app-ability-uiAbility.md) | 是 | 回调事件对应的UIAbility对象。 |
476
477**示例:**
478
479参见[AbilityLifecycleCallback使用示例](#abilitylifecyclecallback使用示例)。
480
481### AbilityLifecycleCallback使用示例
482
483本示例展示了生命周期监听机制的部分使用场景:
4841. 在[AbilityStage](../../application-models/abilitystage.md)创建时注册监听。
4852. 在[AbilityStage](../../application-models/abilitystage.md)销毁时注销监听。
4863. 监听到对应UIAbility创建时加载资源,监听到对应UIAbility销毁时释放资源。
4874. 在UIAbility创建、销毁及前后台状态切换时,记录事件并向外发送通知。
488
489```ts
490// 以MyStage.ets文件为例,使用AbilityLifecycleCallback监听UIAbility生命周期
491import { AbilityLifecycleCallback, AbilityStage, application, UIAbility } from "@kit.AbilityKit";
492import { hilog } from '@kit.PerformanceAnalysisKit';
493import { JSON } from "@kit.ArkTS";
494import { window } from "@kit.ArkUI";
495import { BusinessError } from "@kit.BasicServicesKit";
496
497const DOMAIN = 0x0000;
498const TAG = 'testTag';
499
500function loadContent() {
501  // 加载数据
502}
503
504function releaseContent() {
505  // 释放数据
506}
507
508function recordAbilityEvent(abilityName: string) {
509  // 执行打点
510}
511
512function publishEvent() {
513  // 对外发布通知
514}
515
516let abilityLifecycleCallback: AbilityLifecycleCallback = {
517  onAbilityCreate(ability: UIAbility) {
518    hilog.info(DOMAIN, TAG, 'onAbilityCreate: ' + ability.context.abilityInfo.name);
519    // UIAbility事件打点记录
520    recordAbilityEvent(ability.context.abilityInfo.name);
521    // 模拟入口UIAbility创建时,加载资源对外发布通知
522    if (ability.context.abilityInfo.name === 'EntryAbility') {
523      loadContent();
524      publishEvent();
525    }
526  },
527  onWindowStageCreate(ability: UIAbility, windowStage: window.WindowStage) {
528    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageCreate.');
529  },
530  onWindowStageActive(ability: UIAbility, windowStage: window.WindowStage) {
531    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageActive.');
532  },
533  onWindowStageInactive(ability: UIAbility, windowStage: window.WindowStage) {
534    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageInactive.');
535  },
536  onWindowStageDestroy(ability: UIAbility, windowStage: window.WindowStage) {
537    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageDestroy.');
538  },
539  onAbilityDestroy(ability: UIAbility) {
540    hilog.info(DOMAIN, TAG, 'onAbilityDestroy: ' + ability.context.abilityInfo.name);
541    recordAbilityEvent(ability.context.abilityInfo.name);
542    // 模拟入口UIAbility销毁时,释放资源
543    if (ability.context.abilityInfo.name === 'EntryAbility') {
544      releaseContent();
545      publishEvent();
546    }
547  },
548  onAbilityForeground(ability: UIAbility) {
549    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityForeground.');
550    recordAbilityEvent(ability.context.abilityInfo.name);
551    if (ability.context.abilityInfo.name === 'EntryAbility') {
552      publishEvent();
553    }
554  },
555  onAbilityBackground(ability: UIAbility) {
556    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityBackground.');
557    recordAbilityEvent(ability.context.abilityInfo.name);
558    if (ability.context.abilityInfo.name === 'EntryAbility') {
559      publishEvent();
560    }
561  },
562  onAbilityContinue(ability: UIAbility) {
563    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityContinue.');
564  },
565  onNewWant(ability: UIAbility) {
566    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onNewWant');
567  },
568  onWillNewWant(ability: UIAbility) {
569    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWillNewWant');
570  },
571  onAbilityWillCreate(ability: UIAbility) {
572    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillCreate');
573  },
574  onWindowStageWillCreate(ability: UIAbility, windowStage: window.WindowStage) {
575    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageWillCreate');
576  },
577  onWindowStageWillDestroy(ability: UIAbility, windowStage: window.WindowStage) {
578    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageWillDestroy');
579  },
580  onAbilityWillDestroy(ability: UIAbility) {
581    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillDestroy');
582  },
583  onAbilityWillForeground(ability: UIAbility) {
584    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillForeground');
585  },
586  onAbilityWillBackground(ability: UIAbility) {
587    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillBackground');
588  },
589  onAbilityWillContinue(ability: UIAbility) {
590    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillContinue.');
591  },
592  onWindowStageWillRestore(ability: UIAbility, windowStage: window.WindowStage) {
593    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageWillRestore.');
594  },
595  onWindowStageRestore(ability: UIAbility, windowStage: window.WindowStage) {
596    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onWindowStageRestore.');
597  },
598  onAbilityWillSaveState(ability: UIAbility) {
599    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilityWillSaveState.');
600  },
601  onAbilitySaveState(ability: UIAbility) {
602    hilog.info(DOMAIN, TAG, 'AbilityLifecycleCallback onAbilitySaveState.');
603  }
604};
605
606let lifecycleId = -1; // 保存监听id
607
608export default class MyStage extends AbilityStage {
609  onCreate(): void {
610    hilog.info(DOMAIN, TAG, 'AbilityStage onCreate')
611
612    // AbilityStage创建时注册UIAbility生命周期监听,并把监听id保存起来
613    try {
614      let applicationContext = application.getApplicationContext();
615      lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback);
616    } catch (e) {
617      hilog.error(DOMAIN, TAG, `register abilityLifecycle failed: ${JSON.stringify(e)}`);
618    }
619  }
620
621  onDestroy(): void {
622    // AbilityStage销毁时取消UIAbility生命周期监听注册
623    let applicationContext = application.getApplicationContext();
624    applicationContext.off('abilityLifecycle', lifecycleId).catch((e: BusinessError) => {
625      hilog.error(DOMAIN, TAG, `unregister abilityLifecycle failed: ${JSON.stringify(e)}`);
626    });
627  }
628}
629```
630
631```ts
632// 以EntryAbility.ets为例,展示应用入口UIAbility
633import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
634import { hilog } from '@kit.PerformanceAnalysisKit';
635import { window } from '@kit.ArkUI';
636
637const DOMAIN = 0x0000;
638const TAG = 'testTag';
639
640export default class EntryAbility extends UIAbility {
641  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
642    this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
643    hilog.info(DOMAIN, TAG, 'EntryAbility onCreate');
644  }
645
646  onDestroy(): void {
647    hilog.info(DOMAIN, TAG, 'EntryAbility onDestroy');
648  }
649
650  onWindowStageCreate(windowStage: window.WindowStage): void {
651    // 主窗创建
652    hilog.info(DOMAIN, TAG, 'EntryAbility onWindowStageCreate');
653
654    windowStage.loadContent('pages/Index', (err) => {
655      if (err.code) {
656        hilog.error(DOMAIN, TAG, 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
657        return;
658      }
659      hilog.info(DOMAIN, TAG, 'Succeeded in loading the content.');
660    });
661  }
662
663  onWindowStageDestroy(): void {
664    // 主窗销毁
665    hilog.info(DOMAIN, TAG, 'EntryAbility onWindowStageDestroy');
666  }
667
668  onForeground(): void {
669    // UIAbility切换到前台
670    hilog.info(DOMAIN, TAG, 'EntryAbility onForeground');
671  }
672
673  onBackground(): void {
674    // UIAbility切换到后台
675    hilog.info(DOMAIN, TAG, 'EntryAbility  onBackground');
676  }
677}
678```