1# AbilityStage组件管理器 2 3<!--Kit: Ability Kit--> 4<!--Subsystem: Ability--> 5<!--Owner: @zexin_c--> 6<!--Designer: @li-weifeng2--> 7<!--Tester: @lixueqing513--> 8<!--Adviser: @huipeizi--> 9 10## 概述 11 12[AbilityStage](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md)是一个[Module](../quick-start/application-package-overview.md#应用的多module设计机制)级别的组件管理器,应用的[HAP](../quick-start/hap-package.md)在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。 13 14AbilityStage拥有[onCreate()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#oncreate)、[onDestroy()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#ondestroy12)生命周期回调和[onAcceptWant()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#onacceptwant)、[onConfigurationUpdate()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#onconfigurationupdate)、[onMemoryLevel()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#onmemorylevel)、[onNewProcessRequest()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#onnewprocessrequest11)、[onPrepareTermination()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#onpreparetermination15)等事件回调。 15 16- onCreate()生命周期回调:在开始加载对应Module的第一个应用组件(如[UIAbility组件](../reference/apis-ability-kit/js-apis-app-ability-uiAbility.md)或具体扩展能力的[ExtensionAbility组件](../reference/apis-ability-kit/js-apis-app-ability-extensionAbility.md))实例之前会先创建AbilityStage,并在AbilityStage创建完成之后执行其onCreate()生命周期回调。AbilityStage模块提供在Module加载的时候,通知开发者,可以在此进行该Module的初始化(如资源预加载、线程创建等)。 17 18- onAcceptWant()事件回调:UIAbility[指定实例模式(specified)](uiability-launch-type.md#specified启动模式)启动时候触发的事件回调,具体使用请参见[UIAbility启动模式综述](uiability-launch-type.md)。 19 20- onConfigurationUpdate()事件回调:当系统环境变量(例如系统语言、深浅色等)发生变更时触发的事件回调,配置项均定义在[Configuration](../reference/apis-ability-kit/js-apis-app-ability-configuration.md)类中。 21 22- onMemoryLevel()事件回调:当系统调整内存时触发的事件回调。应用被切换到后台时,系统会将在后台的应用保留在缓存中。即使应用处于缓存中,也会影响系统整体性能。当系统资源不足时,系统会通过多种方式从应用中回收内存,必要时会完全停止应用,从而释放内存用于执行关键任务。为了进一步保持系统内存的平衡,避免系统停止用户的应用进程,可以在AbilityStage中的onMemoryLevel()生命周期回调中订阅系统内存的变化情况,释放不必要的资源。 23 24- onNewProcessRequest()事件回调:UIAbility启动时触发的事件回调。通过该回调,开发者可以指定每个UIAbility启动时是否在独立的进程中创建。该回调返回一个开发者自定义字符串标识,如果返回的字符串标识为开发者曾创建的,则复用该标识所对应的进程,否则创建新的进程。需要注意该回调需要配合在module.json5中声明[isolationProcess](../quick-start/module-configuration-file.md#abilities标签)字段为true。 25 26- onPrepareTermination()事件回调:当应用被用户关闭时调用,可用于询问用户选择立即执行操作还是取消操作。开发者通过在回调中返回[AbilityConstant.PrepareTermination](../reference/apis-ability-kit/js-apis-app-ability-abilityConstant.md#preparetermination15)中定义的枚举类型通知系统是否继续执行关闭动作。 27 28- onDestroy()生命周期回调:当对应Module的最后一个Ability实例退出后触发。此方法仅在应用正常销毁时触发。当应用程序异常退出或被终止时,将不会调用此方法。 29 30 31## 开发步骤 32 33### 创建AbilityStage文件 34 35DevEco Studio默认工程中未自动生成AbilityStage,如需要使用AbilityStage的能力,可以手动新建一个AbilityStage文件,具体步骤如下。 36 37 381. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为myabilitystage。 39 402. 在myabilitystage目录,右键选择“New > ArkTS File”,新建一个文件并命名为MyAbilityStage.ets。 41 423. 打开MyAbilityStage.ets文件,导入AbilityStage的依赖包,自定义类继承AbilityStage并加上需要的生命周期回调,示例中增加了一个[onCreate()](../reference/apis-ability-kit/js-apis-app-ability-abilityStage.md#oncreate)生命周期回调。 43 44 ```ts 45 import { AbilityStage, Want } from '@kit.AbilityKit'; 46 47 export default class MyAbilityStage extends AbilityStage { 48 onCreate(): void { 49 // 应用HAP首次加载时触发,可以在此执行该Module的初始化操作(例如资源预加载、线程创建等)。 50 } 51 52 onAcceptWant(want: Want): string { 53 // 仅specified模式下触发 54 return 'MyAbilityStage'; 55 } 56 } 57 ``` 58 594. 在[module.json5配置文件](../quick-start/module-configuration-file.md)中,通过配置 `srcEntry` 参数来指定模块对应的代码路径,以作为HAP加载的入口。 60 61 ```json 62 { 63 "module": { 64 "name": "entry", 65 "type": "entry", 66 "srcEntry": "./ets/myabilitystage/MyAbilityStage.ets", 67 // ... 68 } 69 } 70 ``` 71 72### 监听系统环境变量的变化 73 74下面以监听系统环境变量的变化的开发场景为例,介绍AbilityStage组件回调函数的使用。 75 76- 在onCreate()生命周期中,通过EnvironmentCallback来监听系统环境变化,例如系统语言、深浅色模式、屏幕方向、字体大小缩放比例、字体粗细缩放比例等信息。 77 78- 当系统环境变量发生变更时,会触发EnvironmentCallback中的onConfigurationUpdated()回调,并打印相关信息。 79 80- 通过关闭应用进程,可以触发AbilityStage的onDestroy()生命周期回调。 81 82 ```ts 83 import { EnvironmentCallback, AbilityStage } from '@kit.AbilityKit'; 84 import { BusinessError } from '@kit.BasicServicesKit'; 85 86 export default class MyAbilityStage extends AbilityStage { 87 onCreate(): void { 88 console.info('AbilityStage onCreate'); 89 let envCallback: EnvironmentCallback = { 90 onConfigurationUpdated(config) { 91 console.info(`envCallback onConfigurationUpdated success: ${JSON.stringify(config)}`); 92 let language = config.language; //应用程序的当前语言 93 let colorMode = config.colorMode; //深浅色模式 94 let direction = config.direction; //屏幕方向 95 let fontSizeScale = config.fontSizeScale; //字体大小缩放比例 96 let fontWeightScale = config.fontWeightScale; //字体粗细缩放比例 97 }, 98 onMemoryLevel(level) { 99 console.info(`onMemoryLevel level: ${level}`); 100 } 101 }; 102 try { 103 let applicationContext = this.context.getApplicationContext(); 104 let callbackId = applicationContext.on('environment', envCallback); 105 console.info(`callbackId: ${callbackId}`); 106 } catch (paramError) { 107 console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`); 108 } 109 } 110 111 onDestroy(): void { 112 // 通过onDestroy()方法,可以监听到Ability的销毁事件。 113 console.info('AbilityStage onDestroy'); 114 } 115 } 116 ```