# @ohos.app.ability.CompletionHandler (拉起应用结果的操作类)
CompletionHandler作为[StartOptions](js-apis-app-ability-startOptions.md)的可选参数,用于处理拉起应用请求的结果。
> **说明:**
>
> - 本模块首批接口从API version 20 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
>
> - 本模块接口仅可在Stage模型下使用。
## 约束限制
当前支持使用该模块的接口包括:
- [startAbility](js-apis-inner-application-uiAbilityContext.md#startability-2)
- [startAbilityForResult](js-apis-inner-application-uiAbilityContext.md#startabilityforresult-2)
- [startAbilityForResultWithAccount](js-apis-inner-application-uiAbilityContext-sys.md#startabilityforresultwithaccount-2)
- [startAbilityWithAccount](js-apis-inner-application-uiAbilityContext-sys.md#startabilitywithaccount-2)
- [startRecentAbility](js-apis-inner-application-uiAbilityContext-sys.md#startrecentability-2)
- [startAbilityAsCaller](js-apis-inner-application-uiAbilityContext-sys.md#startabilityascaller10-2)
## 导入模块
```ts
import { CompletionHandler } from '@kit.AbilityKit';
```
## CompletionHandler
CompletionHandler提供了[onRequestSuccess](#onrequestsuccess)和[onRequestFailure](#onrequestfailure)两个回调函数,分别用来处理拉起应用成功和失败时的结果。
### onRequestSuccess
onRequestSuccess(elementName: ElementName, message: string): void
拉起应用成功时的回调函数。
**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| elementName | [ElementName](js-apis-bundleManager-elementName.md) | 是 | ElementName信息用于标识被拉起应用。通常,ElementName仅包含abilityName和bundleName。moduleName和deviceId信息是否存在取决于调用方是否传入。shortName和uri为空。|
| message | string | 是 | 成功拉起应用时的信息。该信息采用JSON格式,样式如下:
{
"errMsg": "Succeeded."
} |
**示例:**
参见[CompletionHandler使用](#completionhandler使用)。
### onRequestFailure
onRequestFailure(elementName: ElementName, message: string): void
拉起应用失败时的回调函数。
**原子化服务API**:从API version 20开始,该接口支持在原子化服务中使用。
**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
**参数:**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| elementName | [ElementName](js-apis-bundleManager-elementName.md) | 是 | ElementName信息用于标识被拉起应用。
- 通常,ElementName仅包含abilityName和bundleName。moduleName和deviceId信息是否存在取决于调用方是否传入。shortName和uri为空。
- 隐式启动失败时,无法获取ElementName信息。 |
| message | string | 是 | 拉起应用失败时的信息。该信息采用JSON格式,样式如下:
{
"errMsg": "xxx"
}
其中,"xxx"的取值说明如下:
Failed to call \:表示调用接口出错。其中,\为具体的接口名,比如startAbility。
User refused redirection:表示用户关闭了应用跳转弹框。
User closed the implicit startup picker:表示用户关闭了隐式启动时的应用选择弹框。
User closed the app clone picker:表示用户关闭了分身应用选择弹框。
Free installation failed:表示免安装失败。 |
**示例:**
参见[CompletionHandler使用](#completionhandler使用)。
### CompletionHandler使用
```ts
import { UIAbility, Want, StartOptions, CompletionHandler, bundleManager } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
export default class EntryAbility extends UIAbility {
onForeground() {
let want: Want = {
deviceId: '',
bundleName: 'com.example.myapplication',
abilityName: 'EntryAbility'
};
let completionHandler: CompletionHandler = {
onRequestSuccess: (elementName: bundleManager.ElementName, message: string): void => {
console.info(`${elementName.bundleName}-${elementName.moduleName}-${elementName.abilityName} start succeeded: ${message}`);
},
onRequestFailure: (elementName: bundleManager.ElementName, message: string): void => {
console.error(`${elementName.bundleName}-${elementName.moduleName}-${elementName.abilityName} start failed: ${message}`);
}
};
let options: StartOptions = {
completionHandler: completionHandler
};
try {
this.context.startAbility(want, options, (err: BusinessError) => {
if (err.code) {
// 处理业务逻辑错误
console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
return;
}
// 执行正常业务
console.info('startAbility succeed');
});
} catch (err) {
// 处理入参错误异常
let code = (err as BusinessError).code;
let message = (err as BusinessError).message;
console.error(`startAbility failed, code is ${code}, message is ${message}`);
}
}
}
```