• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#  @ohos.app.ability.application (应用工具类)
2
3<!--Kit: Ability Kit-->
4<!--Subsystem: Ability-->
5<!--Owner: @li-weifeng2-->
6<!--Designer: @li-weifeng2-->
7<!--Tester: @lixueqing513-->
8<!--Adviser: @huipeizi-->
9
10开发者可以通过该模块管理和获取应用的上下文[Context](../../application-models/application-context-stage.md),以及控制应用进程的状态。
11
12> **说明:**
13>
14> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15> 本模块接口仅可在Stage模型下使用。
16
17## 导入模块
18
19```ts
20import { application } from '@kit.AbilityKit';
21```
22
23## application.createModuleContext<sup>12+</sup>
24
25createModuleContext(context: Context, moduleName: string): Promise\<Context>
26
27创建指定模块的上下文。创建出的模块上下文中[resourceManager.Configuration](../apis-localization-kit/js-apis-resource-manager.md#configuration)资源继承自入参上下文,便于开发者获取[跨HAP/HSP包应用资源](../../quick-start/resource-categories-and-access.md#跨haphsp包应用资源)。
28
29**原子化服务API**:从API version 12开始,该接口支持在元服务中使用。
30
31**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
32
33**参数**:
34
35| 参数名        | 类型                                       | 必填   | 说明             |
36| --------- | ---------------------------------------- | ---- | -------------- |
37| context | [Context](js-apis-inner-application-context.md) | 是 | 表示应用上下文。 |
38| moduleName | string | 是 | 表示应用模块名。 |
39
40**返回值:**
41
42| 类型               | 说明                |
43| ------------------ | ------------------- |
44| Promise\<[Context](../../reference/apis-ability-kit/js-apis-inner-application-context.md)> | Promise对象。返回创建的Context。 |
45
46**错误码:**
47
48以下错误码详细介绍请参考[通用错误码说明文档](../errorcode-universal.md)。
49
50| 错误码ID | 错误信息        |
51| -------- | --------------- |
52| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. |
53
54**示例:**
55
56```ts
57import { AbilityConstant, UIAbility, application, common, Want } from '@kit.AbilityKit';
58import { BusinessError } from '@kit.BasicServicesKit';
59
60export default class EntryAbility extends UIAbility {
61  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
62    let moduleContext: common.Context;
63    try {
64      application.createModuleContext(this.context, 'entry').then((data: Context) => {
65        moduleContext = data;
66        console.info('createModuleContext success!');
67      }).catch((error: BusinessError) => {
68        let code: number = (error as BusinessError).code;
69        let message: string = (error as BusinessError).message;
70        console.error(`createModuleContext failed, error.code: ${code}, error.message: ${message}`);
71      });
72    } catch (error) {
73      let code: number = (error as BusinessError).code;
74      let message: string = (error as BusinessError).message;
75      console.error(`createModuleContext failed, error.code: ${code}, error.message: ${message}`);
76    }
77  }
78}
79```
80
81## application.getApplicationContext<sup>14+</sup>
82
83getApplicationContext(): ApplicationContext
84
85获取应用上下文。开发者使用该接口时,无需依赖Context基类。
86
87**原子化服务API**:从API version 14开始,该接口支持在元服务中使用。
88
89**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
90
91**返回值:**
92
93| 类型                                                         | 说明                |
94| ------------------------------------------------------------ | ------------------- |
95| [ApplicationContext](js-apis-inner-application-applicationContext.md) | 应用上下文。 |
96
97**错误码:**
98
99以下错误码详细介绍请参考[元能力子系统错误码](errorcode-ability.md)。
100
101| 错误码ID | 错误信息        |
102| -------- | --------------- |
103| 16000050 | Internal error. |
104
105**示例:**
106
107```ts
108import { AbilityConstant, UIAbility, application, Want } from '@kit.AbilityKit';
109import { BusinessError } from '@kit.BasicServicesKit';
110
111export default class EntryAbility extends UIAbility {
112  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
113    try {
114      let applicationContext = application.getApplicationContext();
115    } catch (error) {
116      let code: number = (error as BusinessError).code;
117      let message: string = (error as BusinessError).message;
118      console.error(`getApplicationContext failed, error.code: ${code}, error.message: ${message}`);
119    }
120  }
121}
122```
123
124## application.createPluginModuleContext<sup>19+</sup>
125
126createPluginModuleContext(context: Context, pluginBundleName: string, pluginModuleName: string): Promise\<Context>
127
128根据入参Context、指定的插件包名和插件模块名,创建本应用下插件的Context,用于获取插件的基本信息。使用Promise异步回调。
129
130**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
131
132**参数**:
133
134| 参数名        | 类型                                       | 必填   | 说明             |
135| --------- | ---------------------------------------- | ---- | -------------- |
136| context | [Context](js-apis-inner-application-context.md) | 是 | 表示应用上下文。 |
137| pluginBundleName | string | 是 | 表示应用的插件包名。 |
138| pluginModuleName | string | 是 | 表示应用的插件模块名。 |
139
140**返回值:**
141
142| 类型               | 说明                |
143| ------------------ | ------------------- |
144| Promise\<[Context](../../reference/apis-ability-kit/js-apis-inner-application-context.md)> | Promise对象。返回创建的Context。 |
145
146**示例:**
147
148```ts
149import { AbilityConstant, UIAbility, application, common, Want } from '@kit.AbilityKit';
150import { BusinessError } from '@kit.BasicServicesKit';
151
152export default class EntryAbility extends UIAbility {
153  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
154    let moduleContext: common.Context;
155    try {
156      application.createPluginModuleContext(this.context, 'com.example.pluginBundleName', 'pluginModuleName')
157        .then((data: Context) => {
158          moduleContext = data;
159          console.info('createPluginModuleContext success!');
160        })
161        .catch((error: BusinessError) => {
162          let code: number = (error as BusinessError).code;
163          let message: string = (error as BusinessError).message;
164          console.error(`createPluginModuleContext failed, error.code: ${code}, error.message: ${message}`);
165        });
166    } catch (error) {
167      let code: number = (error as BusinessError).code;
168      let message: string = (error as BusinessError).message;
169      console.error(`createPluginModuleContext failed, error.code: ${code}, error.message: ${message}`);
170    }
171  }
172}
173```
174
175## application.promoteCurrentToCandidateMasterProcess<sup>20+</sup>
176
177promoteCurrentToCandidateMasterProcess(insertToHead: boolean): Promise\<void>
178
179开发者可以调用该接口将当前进程放入[备选主控进程](../../application-models/ability-terminology.md#candidatemasterprocess备选主控进程)链表。使用Promise异步回调。
180
181当[主控进程](../../application-models/ability-terminology.md#masterprocess主控进程)销毁后,再次启动配置了isolationProcess为true的UIAbility/UIExtensionAbility组件时,系统会根据是否存在备选主控进程执行相应操作。
182
183- 如果存在备选主控进程,系统会将备选主控进程链表首节点的进程设置为主控进程,触发[onNewProcessRequest](js-apis-app-ability-abilityStage.md#onnewprocessrequest11)回调。
184- 如果不存在备选主控进程,系统会根据组件类型执行相应的操作。
185	- 对于UIAbility组件,系统将创建新的空进程作为主控进程。
186	- 对于UIExtensionAbility组件,系统会优先复用已有的UIExtensionAbility进程作为新的主控进程,无可用进程时则创建新的空进程作为主控进程。
187
188<!--Del-->
189> **说明:**
190>
191> 当前仅支持sys/commonUI类型的UIExtensionAbility组件在[module.json5配置文件](../../quick-start/module-configuration-file.md)中配置isolationProcess字段为true。
192<!--DelEnd-->
193
194**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
195
196**设备行为差异**:该接口在PC/2in1、Tablet中可正常调用,在其他设备类型中返回801错误码。
197
198**参数**:
199
200| 参数名        | 类型                                       | 必填   | 说明             |
201| --------- | ---------------------------------------- | ---- | -------------- |
202| insertToHead | boolean | 是 | 表示是否将当前进程放入备选主控进程链表的表头。true表示放入表头,false表示放入表尾。|
203
204**返回值:**
205
206| 类型               | 说明                |
207| ------------------ | ------------------- |
208|Promise\<void> | Promise对象。无返回结果。 |
209
210**错误码:**
211
212以下错误码详细介绍请参考[通用错误码说明文档](../errorcode-universal.md)和[元能力子系统错误码](./errorcode-ability.md)。
213
214| 错误码ID | 错误信息        |
215| -------- | --------------- |
216| 801 | Capability not supported.|
217| 16000115 | The current process is not running a component configured with "isolationProcess" and cannot be set as a candidate master process. |
218
219
220**示例:**
221
222```ts
223import { AbilityConstant, UIAbility, application, Want } from '@kit.AbilityKit';
224import { BusinessError } from '@kit.BasicServicesKit';
225
226export default class EntryAbility extends UIAbility {
227  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
228    try {
229      application.promoteCurrentToCandidateMasterProcess(true)
230        .then(() => {
231          console.info('promote succeed');
232        })
233        .catch((err: BusinessError) => {
234          console.error(`promote failed, code is ${err.code}, message is ${err.message}`);
235        });
236    } catch (error) {
237      let code: number = (error as BusinessError).code;
238      let message: string = (error as BusinessError).message;
239      console.error(`promoteCurrentToCandidateMasterProcess failed, error.code: ${code}, error.message: ${message}`);
240    }
241  }
242}
243```
244
245## application.demoteCurrentFromCandidateMasterProcess<sup>20+</sup>
246
247demoteCurrentFromCandidateMasterProcess(): Promise\<void>
248
249撤销当前进程的备选主控进程资格。使用Promise异步回调。
250
251**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
252
253**设备行为差异**:该接口在PC/2in1、Tablet中可正常调用,在其他设备类型中返回801错误码。
254
255**返回值:**
256
257| 类型               | 说明                |
258| ------------------ | ------------------- |
259|Promise\<void> | Promise对象。无返回结果。 |
260
261**错误码:**
262
263以下错误码详细介绍请参考[通用错误码说明文档](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
264
265| 错误码ID | 错误信息        |
266| -------- | --------------- |
267| 801 | Capability not supported.|
268| 16000116 | The current process is already a master process and does not support cancellation. |
269| 16000117 | The current process is not a candidate master process and does not support cancellation. |
270
271**示例:**
272
273```ts
274import { AbilityConstant, UIAbility, application, Want } from '@kit.AbilityKit';
275import { BusinessError } from '@kit.BasicServicesKit';
276
277export default class EntryAbility extends UIAbility {
278  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
279    try {
280      application.demoteCurrentFromCandidateMasterProcess()
281        .then(() => {
282          console.info('demote succeed');
283        })
284        .catch((err: BusinessError) => {
285          console.error(`demote failed, code is ${err.code}, message is ${err.message}`);
286        });
287    } catch (error) {
288      let code: number = (error as BusinessError).code;
289      let message: string = (error as BusinessError).message;
290      console.error(`demoteCurrentFromCandidateMasterProcess failed, error.code: ${code}, error.message: ${message}`);
291    }
292  }
293}
294```