1# @ohos.app.ability.AbilityStage 组件管理器 2 3<!--Kit: Ability Kit--> 4<!--Subsystem: Ability--> 5<!--Owner: @zexin_c--> 6<!--Designer: @li-weifeng2--> 7<!--Tester: @lixueqing513--> 8<!--Adviser: @huipeizi--> 9 10AbilityStage是一个[Module](../../../application-dev/quick-start/application-package-overview.md#应用的多module设计机制)级别的组件管理器,用于进行Module级别的资源预加载、线程创建等初始化操作,以及维护Module下的应用状态。AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。 11 12应用的[HAP](../../../application-dev/quick-start/hap-package.md)/[HSP](../../../application-dev/quick-start/in-app-hsp.md)在首次加载时会创建一个AbilityStage实例。当一个Module中存在AbilityStage和其他组件(UIAbility/ExtensionAbility组件),AbilityStage实例会早于其他组件实例创建。 13 14AbilityStage拥有[onCreate()](#oncreate)、[onDestroy()](#ondestroy12)生命周期回调和[onAcceptWant()](#onacceptwant)、[onConfigurationUpdate()](#onconfigurationupdate)、[onMemoryLevel()](#onmemorylevel)事件回调等。 15 16> **说明:** 17> 18> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 19> 20> 本模块接口仅可在Stage模型下使用。 21 22## 导入模块 23 24```ts 25import { AbilityStage } from '@kit.AbilityKit'; 26``` 27 28## AbilityStage 29 30### 属性 31 32**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 33 34**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 35 36| 名称 | 类型 | 只读 | 可选 | 说明 | 37| -------- | -------- | -------- | -------- | -------- | 38| context | [AbilityStageContext](js-apis-inner-application-abilityStageContext.md) | 否 | 否 | AbilityStage上下文。 | 39 40### onCreate 41 42onCreate(): void 43 44在加载Module的第一个Ability实例前,系统会先创建对应的AbilityStage实例,并在AbilityStage创建完成后,自动触发该回调。 45 46开发者可以在该回调中执行Module的初始化操作(如资源预加载、线程创建等)。同步接口,不支持异步回调。 47 48**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 49 50**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 51 52**示例:** 53 54```ts 55import { AbilityStage } from '@kit.AbilityKit'; 56 57export default class MyAbilityStage extends AbilityStage { 58 onCreate() { 59 console.log('MyAbilityStage.onCreate is called'); 60 } 61} 62``` 63 64 65### onAcceptWant 66 67onAcceptWant(want: Want): string 68 69当启动模式配置为[specified](../../application-models/uiability-launch-type.md#specified启动模式)的UIAbility被拉起时,会触发该回调,并返回一个string作为待启动的UIAbility实例的唯一标识。同步接口,不支持异步回调。 70 71如果系统中已经有相同标识的UIAbility实例存在,则复用已有实例,否则创建新的实例。 72 73> **说明:** 74> 75> 从API version 20开始,当[AbilityStage.onAcceptWantAsync](#onacceptwantasync20)实现时,本回调函数将不会被触发。 76 77**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 78 79**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 80 81**参数:** 82 83| 参数名 | 类型 | 必填 | 说明 | 84| -------- | -------- | -------- | -------- | 85| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,此处表示调用方传入的启动参数,如Ability名称,Bundle名称等。 | 86 87**返回值:** 88 89| 类型 | 说明 | 90| -------- | -------- | 91| string | 返回开发者自定义的UIAbility标识。如果已经启动了相同标识的UIAbility,则复用该UIAbility,否则创建新的实例并启动。 | 92 93**示例:** 94 95 96```ts 97import { AbilityStage, Want } from '@kit.AbilityKit'; 98 99export default class MyAbilityStage extends AbilityStage { 100 onAcceptWant(want: Want) { 101 console.log('MyAbilityStage.onAcceptWant called'); 102 return 'com.example.test'; 103 } 104} 105``` 106 107### onNewProcessRequest<sup>11+</sup> 108 109onNewProcessRequest(want: Want): string 110 111如果UIAbility或UIExtensionAbility配置了在独立进程中运行(即[module.json5配置文件](../../quick-start/module-configuration-file.md)中UIAbility或UIExtensionAbility的isolationProcess字段取值为true),当该UIAbility或UIExtensionAbility被拉起时,会触发该回调,并返回一个string作为进程唯一标识。同步接口,不支持异步回调。 112 113如果该应用已有相同标识的进程存在,则待启动的UIAbility或UIExtensionAbility运行在此进程中,否则创建新的进程。 114 115如果开发者同时实现onNewProcessRequest和[onAcceptWant](#onacceptwant),将先收到onNewProcessRequest回调,再收到onAcceptWant回调。 116 117<!--Del--> 118仅支持sys/commonUI类型的UIExtensionAbility组件在[module.json5配置文件](../../quick-start/module-configuration-file.md)配置文件中配置isolationProcess字段为true。 119<!--DelEnd--> 120 121> **说明:** 122> 123> - 在API version 19及之前版本,仅支持在指定进程中启动UIAbility。从API version 20开始,新增支持在指定进程中启动UIExtensionAbility。 124> - 从API version 20开始,当[AbilityStage.onNewProcessRequestAsync](#onnewprocessrequestasync20)实现时,本回调函数将不执行。 125 126**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 127 128**设备行为差异**:该接口仅在2in1和Tablet设备中可正常执行回调,在其他设备上不执行回调。 129 130**参数:** 131 132| 参数名 | 类型 | 必填 | 说明 | 133| -------- | -------- | -------- | -------- | 134| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,此处表示调用方传入的启动参数,如UIAbility或UIExtensionAbility名称、Bundle名称等。 | 135 136**返回值:** 137 138| 类型 | 说明 | 139| -------- | -------- | 140| string | 返回一个由开发者自行决定的进程字符串标识,如果之前此标识对应的进程已被创建,就让ability在此进程中运行,否则创建新的进程。 | 141 142**示例:** 143 144```ts 145import { AbilityStage, Want } from '@kit.AbilityKit'; 146 147export default class MyAbilityStage extends AbilityStage { 148 onNewProcessRequest(want: Want) { 149 console.log('MyAbilityStage.onNewProcessRequest called'); 150 return 'com.example.test'; 151 } 152} 153``` 154 155 156### onConfigurationUpdate 157 158onConfigurationUpdate(newConfig: Configuration): void 159 160当系统全局配置(例如系统语言、深浅色等)发生变更时,会触发该回调。配置项均定义在[Configuration](../../../application-dev/reference/apis-ability-kit/js-apis-app-ability-configuration.md)类中。同步接口,不支持异步回调。 161 162**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 163 164**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 165 166**参数:** 167 168 | 参数名 | 类型 | 必填 | 说明 | 169 | -------- | -------- | -------- | -------- | 170 | newConfig | [Configuration](js-apis-app-ability-configuration.md) | 是 | 发生全局配置变更时触发回调,当前全局配置包括系统语言、深浅色模式。 | 171 172**示例:** 173 174```ts 175import { AbilityStage, Configuration } from '@kit.AbilityKit'; 176 177export default class MyAbilityStage extends AbilityStage { 178 onConfigurationUpdate(config: Configuration) { 179 console.log(`MyAbilityStage.onConfigurationUpdate, language: ${config.language}`); 180 } 181} 182``` 183 184### onMemoryLevel 185 186onMemoryLevel(level: AbilityConstant.MemoryLevel): void 187 188该接口用于监听系统内存状态变化。当整机可用内存变化到指定程度时,系统会触发该回调。开发者可通过实现此接口,在收到内存紧张事件时,及时释放非必要资源(如缓存数据、临时对象等),以避免应用进程被系统强制终止。 189 190同步接口,不支持异步回调。 191 192**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 193 194**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 195 196**参数:** 197 198 | 参数名 | 类型 | 必填 | 说明 | 199 | -------- | -------- | -------- | -------- | 200 | level | [AbilityConstant.MemoryLevel](js-apis-app-ability-abilityConstant.md#memorylevel) | 是 | 回调返回内存微调级别,显示当前内存使用状态。<br>**说明:**<br>不同产品的触发条件可能存在差异。以12G内存的标准设备为例:<br>- 当可用内存下降至1700M~1800M时,会触发取值为0的onMemoryLevel回调。<br>- 当可用内存下降至1600M~1700M时,会触发取值为1的onMemoryLevel回调。<br>- 当可用内存下降至1600M以下时,会触发取值为2的onMemoryLevel回调。| 201 202**示例:** 203 204```ts 205import { AbilityStage, AbilityConstant } from '@kit.AbilityKit'; 206 207export default class MyAbilityStage extends AbilityStage { 208 onMemoryLevel(level: AbilityConstant.MemoryLevel) { 209 console.log(`MyAbilityStage.onMemoryLevel, level: ${JSON.stringify(level)}`); 210 } 211} 212``` 213 214### onDestroy<sup>12+<sup> 215 216onDestroy(): void 217 218在对应Module的最后一个Ability实例退出后会触发该回调。此方法将在正常的调度生命周期中调用,当应用程序异常退出或被终止时,将不会调用此方法。同步接口,不支持异步回调。 219 220**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 221 222**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 223 224**示例:** 225 226```ts 227import { AbilityStage } from '@kit.AbilityKit'; 228 229export default class MyAbilityStage extends AbilityStage { 230 onDestroy() { 231 console.log('MyAbilityStage.onDestroy is called'); 232 } 233} 234``` 235 236### onPrepareTermination<sup>15+<sup> 237 238onPrepareTermination(): AbilityConstant.PrepareTermination 239 240当应用被用户关闭时调用,可用于询问用户选择立即执行操作还是取消操作。同步接口,不支持异步回调。 241 242> **说明:** 243> 244> - 仅当应用正常退出(例如,通过doc栏/托盘关闭应用,或者应用随设备关机而退出)时会调用该接口。如果应用被强制关闭,则不会调用该接口。 245> 246> - 当[AbilityStage.onPrepareTerminationAsync](#onprepareterminationasync15)实现时,本回调函数将不执行。 247 248**需要权限**:ohos.permission.PREPARE_APP_TERMINATE 249 250**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。 251 252**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 253 254**设备行为差异**: 255- 从API version 15开始,该接口仅在2in1设备中可正常执行回调,在其他设备上不执行回调。 256- 从API version 19开始,该接口仅在2in1和Tablet设备中可正常执行回调,在其他设备上不执行回调。 257 258**返回值:** 259 260| 类型 | 说明 | 261| -------- | -------- | 262| [AbilityConstant.PrepareTermination](js-apis-app-ability-abilityConstant.md#preparetermination15) | 用于返回用户的选择结果。 | 263 264**示例:** 265 266```ts 267import { AbilityConstant, AbilityStage } from '@kit.AbilityKit'; 268 269export default class MyAbilityStage extends AbilityStage { 270 onPrepareTermination(): AbilityConstant.PrepareTermination { 271 console.info('MyAbilityStage.onPrepareTermination is called'); 272 return AbilityConstant.PrepareTermination.CANCEL; 273 } 274} 275``` 276 277### onPrepareTerminationAsync<sup>15+<sup> 278 279onPrepareTerminationAsync(): Promise\<AbilityConstant.PrepareTermination> 280 281当应用被用户关闭时调用,可用于询问用户选择立即执行操作还是取消操作。使用Promise异步回调。 282 283> **说明:** 284> 285> - 仅当应用正常退出(例如,通过doc栏/托盘关闭应用,或者应用随设备关机而退出)时会调用该接口。如果应用被强制关闭,则不会调用该接口。 286> 287> - 若异步回调内发生crash,按超时处理,执行等待超过10秒未响应,应用将被强制关闭。 288 289**需要权限**:ohos.permission.PREPARE_APP_TERMINATE 290 291**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。 292 293**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 294 295**设备行为差异**: 296- 从API version 15开始,该接口仅在2in1设备中可正常执行回调,在其他设备上不执行回调。 297- 从API version 19开始,该接口仅在2in1和Tablet设备中可正常执行回调,在其他设备上不执行回调。 298 299**返回值:** 300 301| 类型 | 说明 | 302| -------- | -------- | 303| Promise\<[AbilityConstant.PrepareTermination](js-apis-app-ability-abilityConstant.md#preparetermination15)> | Promise对象,返回用户的选择结果。 | 304 305**示例:** 306 307```ts 308import { AbilityConstant, AbilityStage } from '@kit.AbilityKit'; 309 310export default class MyAbilityStage extends AbilityStage { 311 async onPrepareTerminationAsync(): Promise<AbilityConstant.PrepareTermination> { 312 await new Promise<AbilityConstant.PrepareTermination>((res, rej) => { 313 setTimeout(res, 3000); // 延时3秒后执行 314 }); 315 return AbilityConstant.PrepareTermination.CANCEL; 316 } 317} 318``` 319 320### onAcceptWantAsync<sup>20+</sup> 321 322onAcceptWantAsync(want: Want): Promise\<string\> 323 324当启动模式配置为[specified](../../application-models/uiability-launch-type.md#specified启动模式)的UIAbility被拉起时,会触发该回调,并返回一个string作为待启动的UIAbility实例的唯一标识。使用Promise异步回调。 325 326如果系统中已经有相同标识的UIAbility实例存在,则复用已有实例,否则创建新的实例。 327 328**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。 329 330**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 331 332**参数:** 333 334| 参数名 | 类型 | 必填 | 说明 | 335| -------- | -------- | -------- | -------- | 336| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,传入需要启动的UIAbility的信息,如UIAbility名称、Bundle名称等。 | 337 338**返回值:** 339 340 | 类型 | 说明 | 341 | -------- | -------- | 342 | Promise\<string\> | Promise对象,返回一个string作为待启动的UIAbility实例的唯一标识。如果系统中已经有该标识的UIAbility实例存在,则复用已有实例,否则创建新的实例。 | 343 344**示例:** 345 346```ts 347import { AbilityStage } from '@kit.AbilityKit'; 348 349class MyAbilityStage extends AbilityStage { 350 async onAcceptWantAsync(): Promise<string> { 351 await new Promise<string>((res, rej) => { 352 setTimeout(res, 1000); // 延时1秒后执行 353 }); 354 return 'default'; 355 } 356} 357``` 358 359### onNewProcessRequestAsync<sup>20+</sup> 360 361onNewProcessRequestAsync(want: Want): Promise\<string\> 362 363如果UIAbility或UIExtensionAbility配置了在独立进程中运行(即[module.json5配置文件](../../quick-start/module-configuration-file.md)中UIAbility或UIExtensionAbility的isolationProcess字段取值为true),当该UIAbility或UIExtensionAbility被拉起时,会触发该回调,并返回一个string作为进程唯一标识。使用Promise异步回调。 364 365如果该应用已有相同标识的进程存在,则待启动的UIAbility或UIExtensionAbility运行在此进程中,否则创建新的进程。 366 367<!--Del--> 368仅支持sys/commonUI类型的UIExtensionAbility组件在[module.json5配置文件](../../quick-start/module-configuration-file.md)中配置isolationProcess字段为true。 369<!--DelEnd--> 370 371**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。 372 373**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 374 375**设备行为差异**:该接口仅在2in1和Tablet设备中可正常执行回调,在其他设备上不执行回调。 376 377**参数:** 378 379| 参数名 | 类型 | 必填 | 说明 | 380| -------- | -------- | -------- | -------- | 381| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,此处表示调用方传入的启动参数,如UIAbility或UIExtensionAbility名称、Bundle名称等。 | 382 383**返回值:** 384 385| 类型 | 说明 | 386| -------- | -------- | 387| Promise\<string\> | Promise对象,返回一个由开发者自定义的进程字符串标识。如果该应用已有相同标识的进程存在,则UIAbility或UIExtensionAbility在此进程中运行,否则创建新的进程。 | 388 389**示例:** 390 391```ts 392import { AbilityStage } from '@kit.AbilityKit'; 393 394class MyAbilityStage extends AbilityStage { 395 async onNewProcessRequestAsync(): Promise<string> { 396 await new Promise<string>((res, rej) => { 397 setTimeout(res, 1000); // 延时1秒后执行 398 }); 399 return ''; 400 } 401} 402``` 403