1# @ohos.app.ability.AbilityConstant (AbilityConstant)
2
3AbilityConstant提供UIAbility相关的枚举,包括设置初次启动原因、上次退出原因、迁移结果、窗口类型等。
4
5> **说明:**
6>
7> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8>
9> - 本模块接口仅可在Stage模型下使用。
10
11## 导入模块
12
13```ts
14import { AbilityConstant } from '@kit.AbilityKit';
15```
16
17## LaunchParam
18
19启动参数。Ability启动时由系统自动传入,开发者无需修改。
20
21**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
22
23| 名称 | 类型 | 只读 | 可选 | 说明 |
24| -------- | -------- | -------- | -------- | -------- |
25| launchReason | [LaunchReason](#launchreason)| 否 | 否 | 枚举类型,表示启动原因。<br>**原子化服务API**: 从API version 11开始,该接口支持在原子化服务中使用。 |
26| lastExitReason | [LastExitReason](#lastexitreason) | 否 | 否 | 枚举类型,表示最后退出原因。<br>**原子化服务API**: 从API version 11开始,该接口支持在原子化服务中使用。 |
27| lastExitMessage<sup>12+</sup> | string | 否 | 否 | 表示最后退出详细原因。<br>**原子化服务API**: 从API version 12开始,该接口支持在原子化服务中使用。 |
28
29## LaunchReason
30
31Ability初次启动原因,该类型为枚举,可配合UIAbility的[onCreate(want, launchParam)](js-apis-app-ability-uiAbility.md#uiabilityoncreate)方法根据launchParam.launchReason的不同类型执行相应操作。
32
33**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
34
35| 名称                          | 值   | 说明                                                         |
36| ----------------------------- | ---- | ------------------------------------------------------------ |
37| UNKNOWN          | 0    | 未知原因。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
38| START_ABILITY          | 1    | 通过[startAbility](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)接口启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
39| CALL | 2    | 通过[startAbilityByCall](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall)接口启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
40| CONTINUATION           | 3    | 跨端迁移启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
41| APP_RECOVERY           | 4    | 设置应用恢复后,应用故障时自动恢复启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
42| SHARE<sup>10+</sup>           | 5    | 通过原子化服务分享启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
43| AUTO_STARTUP<sup>11+</sup>           | 8    | 通过设置开机自启动来启动Ability。 |
44| INSIGHT_INTENT<sup>11+</sup>           | 9    | 通过洞察意图来启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
45| PREPARE_CONTINUATION<sup>12+</sup>           | 10    | 跨端迁移提前启动Ability。<br>**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。|
46
47**示例:**
48
49```ts
50import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit';
51
52class MyAbility extends UIAbility {
53  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
54    if (launchParam.launchReason === AbilityConstant.LaunchReason.START_ABILITY) {
55      console.log('The ability has been started by the way of startAbility.');
56    }
57  }
58}
59```
60
61## LastExitReason
62
63Ability上次退出原因,该类型为枚举,可配合UIAbility的[onCreate(want, launchParam)](js-apis-app-ability-uiAbility.md#uiabilityoncreate)方法根据launchParam.lastExitReason的不同类型执行相应操作。
64
65**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
66
67| 名称                          | 值   | 说明                                                         |
68| ----------------------------- | ---- | ------------------------------------------------------------ |
69| UNKNOWN          | 0    | 未知原因。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
70| ABILITY_NOT_RESPONDING<sup>(deprecated)</sup> | 1    | ability未响应。<br>**说明:** 从API version 9开始支持,从API version 10开始废弃,请使用APP_FREEZE替代。|
71| NORMAL | 2    | 用户主动关闭,应用程序正常退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
72| CPP_CRASH<sup>10+</sup>  | 3    | 本机异常信号,导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
73| JS_ERROR<sup>10+</sup>  | 4    | 当应用存在JS语法错误并未被开发者捕获时,触发JS_ERROR故障,导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
74| APP_FREEZE<sup>10+</sup>  | 5    | 由于watchdog检测出应用Freeze故障,导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
75| PERFORMANCE_CONTROL<sup>10+</sup>  | 6    | 由于系统性能问题(如设备内存不足),导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。<br>**说明**:该接口即将废弃,建议使用RESOURCE_CONTROL替代。 |
76| RESOURCE_CONTROL<sup>10+</sup>  | 7    | 系统资源使用不当,导致应用程序退出。具体错误原因可以通过[LaunchParam.lastExitMessage](#launchparam)获取,可能原因如下: <br> - CPU Highload,CPU高负载。<br> - CPU_EXT Highload,快速CPU负载检测。<br> - IO Manage Control,I/O管控。<br> - App Memory Deterioration,应用内存超限劣化。<br> - Temperature Control,温度管控。<br> - Memory Pressure,整机低内存触发按优先级由低到高查杀。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。|
77| UPGRADE<sup>10+</sup>  | 8    | 应用程序因升级而退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 |
78
79**示例:**
80
81```ts
82import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit';
83
84class MyAbility extends UIAbility {
85  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
86    if (launchParam.lastExitReason === AbilityConstant.LastExitReason.APP_FREEZE) {
87      console.log('The ability has exit last because the ability was not responding.');
88    }
89    if (launchParam.lastExitReason === AbilityConstant.LastExitReason.RESOURCE_CONTROL) {
90      console.log('The ability has exit last because the rss control,the lastExitReason is '+  launchParam.lastExitReason + ', the lastExitMessage is ' + launchParam.lastExitMessage);
91    }
92  }
93}
94```
95
96## OnContinueResult
97
98Ability迁移结果,该类型为枚举,可配合UIAbility的[onContinue(wantParam)](js-apis-app-ability-uiAbility.md#uiabilityoncontinue)方法进完成相应的返回。
99
100**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
101
102**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
103
104| 名称                          | 值   | 说明                                                         |
105| ----------------------------- | ---- | ------------------------------------------------------------ |
106| AGREE           | 0    | 表示同意。 |
107| REJECT           | 1    | 表示拒绝:如应用在[onContinue](js-apis-app-ability-uiAbility.md#uiabilityoncontinue)中异常会导致迁移以后数据恢复时显示异常,则可以建议REJECT。 |
108| MISMATCH  | 2    | 表示版本不匹配:迁移发起端应用可以在[onContinue](js-apis-app-ability-uiAbility.md#uiabilityoncontinue)中获取到迁移目标端应用的版本号,进行协商后,如果版本不匹配导致无法迁移,可以返回该错误。|
109
110**示例:**
111
112```ts
113import { UIAbility, AbilityConstant } from '@kit.AbilityKit';
114
115class MyAbility extends UIAbility {
116  onContinue(wantParam: Record<string, Object>) {
117    return AbilityConstant.OnContinueResult.AGREE;
118  }
119}
120```
121
122## MemoryLevel
123
124内存级别,该类型为枚举,可配合UIAbility的[onMemoryLevel(level)](js-apis-app-ability-ability.md#abilityonmemorylevel)方法根据level执行不同内存级别的相应操作。
125
126**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
127
128**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
129
130| 名称                         | 值 | 说明                |
131| ---                         | --- | ---           |
132| MEMORY_LEVEL_MODERATE       | 0   | 内存占用适中。 |
133| MEMORY_LEVEL_LOW            | 1   | 内存占用低。   |
134| MEMORY_LEVEL_CRITICAL       | 2   | 内存占用高。   |
135
136**示例:**
137
138```ts
139import { UIAbility, AbilityConstant } from '@kit.AbilityKit';
140
141class MyAbility extends UIAbility {
142  onMemoryLevel(level: AbilityConstant.MemoryLevel) {
143    if (level === AbilityConstant.MemoryLevel.MEMORY_LEVEL_CRITICAL) {
144      console.log('The memory of device is critical, please release some memory.');
145    }
146  }
147}
148```
149
150## WindowMode<sup>12+</sup>
151
152启动Ability时的窗口模式,类型为枚举。可配合[startAbility](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)使用,指定启动Ability的窗口模式。
153
154**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
155
156| 名称                        | 值 | 说明                 |
157| ---                         | --- | ---                  |
158| WINDOW_MODE_FULLSCREEN      | 1   | 全屏模式。仅在2in1和tablet设备上生效。  |
159| WINDOW_MODE_SPLIT_PRIMARY   | 100 | 支持应用内拉起Ability时设置为分屏,左侧分屏。仅在折叠屏和tablet设备上生效。   |
160| WINDOW_MODE_SPLIT_SECONDARY | 101 | 支持应用内拉起Ability时设置为分屏,右侧分屏。仅在折叠屏和tablet设备上生效。   |
161
162**示例:**
163
164```ts
165import { UIAbility, StartOptions, Want, AbilityConstant } from '@kit.AbilityKit';
166import { BusinessError } from '@kit.BasicServicesKit';
167
168let want: Want = {
169  bundleName: 'com.example.myapplication',
170  abilityName: 'EntryAbility'
171};
172let option: StartOptions = {
173  windowMode: AbilityConstant.WindowMode.WINDOW_MODE_SPLIT_PRIMARY
174};
175
176// 确保从上下文获取到context
177class MyAbility extends UIAbility {
178  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
179    this.context.startAbility(want, option).then(() => {
180      console.log('Succeed to start ability.');
181    }).catch((error: BusinessError) => {
182      console.error(`Failed to start ability with error: ${JSON.stringify(error)}`);
183    });
184  }
185}
186```
187
188## OnSaveResult
189
190保存应用数据的结果,该类型为枚举,可配合UIAbility的[onSaveState(reason, wantParam)](js-apis-app-ability-uiAbility.md#uiabilityonsavestate)方法完成相应的返回。
191
192**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
193
194**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
195
196| 名称                          | 值   | 说明                                                         |
197| ----------------------------- | ---- | ------------------------------------------------------------ |
198| ALL_AGREE           | 0    | 总是同意保存状态。 |
199| CONTINUATION_REJECT           | 1    | 拒绝迁移保存状态。 |
200| CONTINUATION_MISMATCH  | 2    | 迁移不匹配。|
201| RECOVERY_AGREE           | 3    | 同意恢复保存状态。 |
202| RECOVERY_REJECT  | 4    | 拒绝恢复保存状态。|
203| ALL_REJECT  | 5    | 总是拒绝保存状态。|
204
205**示例:**
206
207```ts
208import { UIAbility, AbilityConstant } from '@kit.AbilityKit';
209
210class MyAbility extends UIAbility {
211  onSaveState(reason: AbilityConstant.StateType, wantParam: Record<string, Object>) {
212    return AbilityConstant.OnSaveResult.ALL_AGREE;
213  }
214}
215```
216
217## StateType
218
219保存应用数据场景原因,该类型为枚举,可配合UIAbility的[onSaveState(reason, wantParam)](js-apis-app-ability-uiAbility.md#uiabilityonsavestate)方法根据reason的不同类型执行相应操作。
220
221**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
222
223**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
224
225| 名称                          | 值   | 说明                                                         |
226| ----------------------------- | ---- | ------------------------------------------------------------ |
227| CONTINUATION           | 0    | 迁移保存状态。 |
228| APP_RECOVERY           | 1    | 应用恢复保存状态。 |
229
230**示例:**
231
232```ts
233import { UIAbility, AbilityConstant } from '@kit.AbilityKit';
234
235class MyAbility extends UIAbility {
236  onSaveState(reason: AbilityConstant.StateType, wantParam: Record<string, Object>) {
237    if (reason === AbilityConstant.StateType.CONTINUATION) {
238      console.log('Save the ability data when the ability continuation.');
239    }
240    return AbilityConstant.OnSaveResult.ALL_AGREE;
241  }
242}
243```
244
245## ContinueState<sup>10+</sup>
246
247流转状态枚举值。用于表示当前应用任务流转的状态。可配合[UIAbilityContext](js-apis-inner-application-uiAbilityContext.md)的[setMissionContinueState](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissioncontinuestate10)方法进行设置。
248
249**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。
250
251**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
252
253| 名称           | 值       | 说明                                                         |
254| ------------- | --------- | ------------------------------------------------------------ |
255| ACTIVE        | 0         | 指示当前应用任务流转处于激活状态。                              |
256| INACTIVE      | 1         | 指示当前应用任务流转处于未激活状态。                            |
257
258**示例:**
259
260```ts
261import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit';
262import { BusinessError } from '@kit.BasicServicesKit';
263
264class MyAbility extends UIAbility {
265  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
266    this.context.setMissionContinueState(AbilityConstant.ContinueState.INACTIVE, (result: BusinessError) => {
267      console.info(`setMissionContinueState: ${JSON.stringify(result)}`);
268    });
269  }
270}
271```
272