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