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| launchReasonMessage<sup>18+</sup> | string | 否 | 是 | 表示启动的详细原因。<br>**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 | 27| lastExitReason | [LastExitReason](#lastexitreason) | 否 | 否 | 枚举类型,表示最后退出原因。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 28| lastExitMessage<sup>12+</sup> | string | 否 | 否 | 表示最后退出详细原因。<br>**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。 | 29| lastExitDetailInfo<sup>18+</sup> | [LastExitDetailInfo](#lastexitdetailinfo18) | 否 | 是 | 表示最后退出时的进程状态和详细原因。<br>**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 | 30 31## LaunchReason 32 33Ability初次启动原因,该类型为枚举,可配合UIAbility的[onCreate(want, launchParam)](js-apis-app-ability-uiAbility.md#uiabilityoncreate)方法根据launchParam.launchReason的不同类型执行相应操作。 34 35**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 36 37| 名称 | 值 | 说明 | 38| ----------------------------- | ---- | ------------------------------------------------------------ | 39| UNKNOWN | 0 | 未知原因。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 40| START_ABILITY | 1 | 通过[startAbility](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)接口启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 41| CALL | 2 | 通过[startAbilityByCall](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall)接口启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 42| CONTINUATION | 3 | 跨端迁移启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 43| APP_RECOVERY | 4 | 设置应用恢复后,应用故障时自动恢复启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 44| SHARE<sup>10+</sup> | 5 | 通过原子化服务分享启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 45| AUTO_STARTUP<sup>11+</sup> | 8 | 通过设置开机自启动来启动Ability。 | 46| INSIGHT_INTENT<sup>11+</sup> | 9 | 通过洞察意图来启动Ability。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 47| PREPARE_CONTINUATION<sup>12+</sup> | 10 | 跨端迁移提前启动Ability。<br>**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。| 48 49**示例:** 50 51```ts 52import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit'; 53 54class MyAbility extends UIAbility { 55 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 56 if (launchParam.launchReason === AbilityConstant.LaunchReason.START_ABILITY) { 57 console.log('The ability has been started by the way of startAbility.'); 58 } 59 } 60} 61``` 62 63## LastExitReason 64 65Ability上次退出原因,该类型为枚举,可配合UIAbility的[onCreate(want, launchParam)](js-apis-app-ability-uiAbility.md#uiabilityoncreate)方法根据launchParam.lastExitReason的不同类型执行相应操作。 66 67**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 68 69| 名称 | 值 | 说明 | 70| ----------------------------- | ---- | ------------------------------------------------------------ | 71| UNKNOWN | 0 | 未知原因。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 72| ABILITY_NOT_RESPONDING<sup>(deprecated)</sup> | 1 | ability未响应。<br>**说明:** 从API version 9开始支持,从API version 10开始废弃,请使用APP_FREEZE替代。| 73| NORMAL | 2 | 用户主动关闭,应用程序正常退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。<br>**说明**:如果调用[process.exit()](../apis-arkts/js-apis-process.md#processexitdeprecated)、kill命令等非Ability Kit提供的能力退出应用进程,也会返回NORMAL。 | 74| CPP_CRASH<sup>10+</sup> | 3 | 本机异常信号,导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 75| JS_ERROR<sup>10+</sup> | 4 | 当应用存在JS语法错误并未被开发者捕获时,触发JS_ERROR故障,导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 76| APP_FREEZE<sup>10+</sup> | 5 | 由于watchdog检测出应用Freeze故障,导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 77| PERFORMANCE_CONTROL<sup>10+</sup> | 6 | 由于系统性能问题(如设备内存不足),导致应用程序退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。<br>**说明**:该接口即将废弃,建议使用RESOURCE_CONTROL替代。 | 78| 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开始,该接口支持在原子化服务中使用。| 79| UPGRADE<sup>10+</sup> | 8 | 应用程序因升级而退出。<br>**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 | 80| USER_REQUEST<sup>18+</sup> | 9 | 应用程序因多任务中心请求而退出,例如用户在多任务管理界面执行上划、一键清理等操作。<br>**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 | 81| SIGNAL<sup>18+</sup> | 10 | 应用程序因收到系统kill指令信号而退出。<br>**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 | 82 83**示例:** 84 85```ts 86import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit'; 87 88class MyAbility extends UIAbility { 89 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 90 if (launchParam.lastExitReason === AbilityConstant.LastExitReason.APP_FREEZE) { 91 console.log('The ability has exit last because the ability was not responding.'); 92 } 93 if (launchParam.lastExitReason === AbilityConstant.LastExitReason.RESOURCE_CONTROL) { 94 console.log('The ability has exit last because the rss control,the lastExitReason is '+ launchParam.lastExitReason + ', the lastExitMessage is ' + launchParam.lastExitMessage); 95 } 96 } 97} 98``` 99 100## LastExitDetailInfo<sup>18+</sup> 101 102记录Ability所在进程上次退出的详细信息。 103 104**原子化服务API**:从API version 18开始,该接口支持在原子化服务中使用。 105 106**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 107 108| 名称 | 类型 | 只读 | 可选 | 说明 | 109| -------- | -------- | -------- | -------- | -------- | 110| pid | number | 否 | 否 | Ability上次退出所在进程的进程号。 | 111| processName | string | 否 | 否 | Ability上次退出所在进程的名称。 | 112| uid | number | 否 | 否 | Ability上次退出所在应用的UID。 | 113| exitSubReason | number | 否 | 否 | Ability上次退出的子原因。 | 114| exitMsg | string | 否 | 否 | Ability上次退出时所在进程被kill的描述信息。 | 115| rss | number | 否 | 否 | Ability上次退出时所在进程的rss值。 | 116| pss | number | 否 | 否 | Ability上次退出时所在进程的pss值。 | 117| timestamp | number | 否 | 否 | Ability上次退出时的时间戳。 | 118 119**示例**: 120 121```ts 122import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit'; 123 124class MyAbility extends UIAbility { 125 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 126 if (launchParam.lastExitDetailInfo) { 127 console.log('pid: ' + launchParam.lastExitDetailInfo.pid + 128 '\n processName: ' + launchParam.lastExitDetailInfo.processName + 129 '\n uid: ' + launchParam.lastExitDetailInfo.uid + 130 '\n exitSubReason: ' + launchParam.lastExitDetailInfo.exitSubReason + 131 '\n exitMsg: ' + launchParam.lastExitDetailInfo.exitMsg + 132 '\n rss: ' + launchParam.lastExitDetailInfo.rss + 133 '\n pss: ' + launchParam.lastExitDetailInfo.pss + 134 '\n timestamp: ' + launchParam.lastExitDetailInfo.timestamp 135 ); 136 } 137 } 138} 139``` 140 141## OnContinueResult 142 143Ability迁移结果,该类型为枚举,可配合UIAbility的[onContinue(wantParam)](js-apis-app-ability-uiAbility.md#uiabilityoncontinue)方法进完成相应的返回。 144 145**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 146 147**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 148 149| 名称 | 值 | 说明 | 150| ----------------------------- | ---- | ------------------------------------------------------------ | 151| AGREE | 0 | 表示同意。 | 152| REJECT | 1 | 表示拒绝:如应用在[onContinue](js-apis-app-ability-uiAbility.md#uiabilityoncontinue)中异常会导致迁移以后数据恢复时显示异常,则可以建议REJECT。 | 153| MISMATCH | 2 | 表示版本不匹配:迁移发起端应用可以在[onContinue](js-apis-app-ability-uiAbility.md#uiabilityoncontinue)中获取到迁移目标端应用的版本号,进行协商后,如果版本不匹配导致无法迁移,可以返回该错误。| 154 155**示例:** 156 157```ts 158import { UIAbility, AbilityConstant } from '@kit.AbilityKit'; 159 160class MyAbility extends UIAbility { 161 onContinue(wantParam: Record<string, Object>) { 162 return AbilityConstant.OnContinueResult.AGREE; 163 } 164} 165``` 166 167## MemoryLevel 168 169内存级别,该类型为枚举,可配合UIAbility的[onMemoryLevel(level)](js-apis-app-ability-ability.md#abilityonmemorylevel)方法根据level执行不同内存级别的相应操作。 170 171**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 172 173**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 174 175| 名称 | 值 | 说明 | 176| --- | --- | --- | 177| MEMORY_LEVEL_MODERATE | 0 | 内存占用适中。 | 178| MEMORY_LEVEL_LOW | 1 | 内存占用低。 | 179| MEMORY_LEVEL_CRITICAL | 2 | 内存占用高。 | 180 181**示例:** 182 183```ts 184import { UIAbility, AbilityConstant } from '@kit.AbilityKit'; 185 186class MyAbility extends UIAbility { 187 onMemoryLevel(level: AbilityConstant.MemoryLevel) { 188 if (level === AbilityConstant.MemoryLevel.MEMORY_LEVEL_CRITICAL) { 189 console.log('The memory of device is critical, please release some memory.'); 190 } 191 } 192} 193``` 194 195## WindowMode<sup>12+</sup> 196 197启动Ability时的窗口模式,类型为枚举。可配合[startAbility](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)使用,指定启动Ability的窗口模式。 198 199**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 200 201| 名称 | 值 | 说明 | 202| --- | --- | --- | 203| WINDOW_MODE_FULLSCREEN | 1 | 全屏模式。仅在2in1和tablet设备上生效。 | 204| WINDOW_MODE_SPLIT_PRIMARY | 100 | 支持应用内拉起Ability时设置为分屏,左侧分屏。仅在折叠屏和tablet设备上生效。 | 205| WINDOW_MODE_SPLIT_SECONDARY | 101 | 支持应用内拉起Ability时设置为分屏,右侧分屏。仅在折叠屏和tablet设备上生效。 | 206 207**示例:** 208 209```ts 210import { UIAbility, StartOptions, Want, AbilityConstant } from '@kit.AbilityKit'; 211import { BusinessError } from '@kit.BasicServicesKit'; 212 213let want: Want = { 214 bundleName: 'com.example.myapplication', 215 abilityName: 'EntryAbility' 216}; 217let option: StartOptions = { 218 windowMode: AbilityConstant.WindowMode.WINDOW_MODE_SPLIT_PRIMARY 219}; 220 221// 确保从上下文获取到context 222class MyAbility extends UIAbility { 223 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 224 this.context.startAbility(want, option).then(() => { 225 console.log('Succeed to start ability.'); 226 }).catch((error: BusinessError) => { 227 console.error(`Failed to start ability with error: ${JSON.stringify(error)}`); 228 }); 229 } 230} 231``` 232 233## OnSaveResult 234 235保存应用数据的结果,该类型为枚举,可配合UIAbility的[onSaveState(reason, wantParam)](js-apis-app-ability-uiAbility.md#uiabilityonsavestate)方法完成相应的返回。 236 237**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 238 239**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 240 241| 名称 | 值 | 说明 | 242| ----------------------------- | ---- | ------------------------------------------------------------ | 243| ALL_AGREE | 0 | 总是同意保存状态。 | 244| CONTINUATION_REJECT | 1 | 拒绝迁移保存状态。 | 245| CONTINUATION_MISMATCH | 2 | 迁移不匹配。| 246| RECOVERY_AGREE | 3 | 同意恢复保存状态。 | 247| RECOVERY_REJECT | 4 | 拒绝恢复保存状态。| 248| ALL_REJECT | 5 | 总是拒绝保存状态。| 249 250**示例:** 251 252```ts 253import { UIAbility, AbilityConstant } from '@kit.AbilityKit'; 254 255class MyAbility extends UIAbility { 256 onSaveState(reason: AbilityConstant.StateType, wantParam: Record<string, Object>) { 257 return AbilityConstant.OnSaveResult.ALL_AGREE; 258 } 259} 260``` 261 262## StateType 263 264保存应用数据场景原因,该类型为枚举,可配合UIAbility的[onSaveState(reason, wantParam)](js-apis-app-ability-uiAbility.md#uiabilityonsavestate)方法根据reason的不同类型执行相应操作。 265 266**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 267 268**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 269 270| 名称 | 值 | 说明 | 271| ----------------------------- | ---- | ------------------------------------------------------------ | 272| CONTINUATION | 0 | 迁移保存状态。 | 273| APP_RECOVERY | 1 | 应用恢复保存状态。 | 274 275**示例:** 276 277```ts 278import { UIAbility, AbilityConstant } from '@kit.AbilityKit'; 279 280class MyAbility extends UIAbility { 281 onSaveState(reason: AbilityConstant.StateType, wantParam: Record<string, Object>) { 282 if (reason === AbilityConstant.StateType.CONTINUATION) { 283 console.log('Save the ability data when the ability continuation.'); 284 } 285 return AbilityConstant.OnSaveResult.ALL_AGREE; 286 } 287} 288``` 289 290## ContinueState<sup>10+</sup> 291 292流转状态枚举值。用于表示当前应用任务流转的状态。可配合[UIAbilityContext](js-apis-inner-application-uiAbilityContext.md)的[setMissionContinueState](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissioncontinuestate10)方法进行设置。 293 294**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 295 296**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 297 298| 名称 | 值 | 说明 | 299| ------------- | --------- | ------------------------------------------------------------ | 300| ACTIVE | 0 | 指示当前应用任务流转处于激活状态。 | 301| INACTIVE | 1 | 指示当前应用任务流转处于未激活状态。 | 302 303**示例:** 304 305```ts 306import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit'; 307import { BusinessError } from '@kit.BasicServicesKit'; 308 309class MyAbility extends UIAbility { 310 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 311 this.context.setMissionContinueState(AbilityConstant.ContinueState.INACTIVE, (result: BusinessError) => { 312 console.info(`setMissionContinueState: ${JSON.stringify(result)}`); 313 }); 314 } 315} 316``` 317 318## CollaborateResult<sup>18+</sup> 319 320协同状态枚举值,用于表示多设备场景下,调用方应用拉起协同方应用时,协同方应用是否接受协同。配合UIAbility的[onCollaborate(wantParam)](js-apis-app-ability-uiAbility.md#uiabilityoncollaborate18)方法进行设置。 321 322**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 323 324| 名称 | 值 | 说明 | 325| -------- | ---- | ---------- | 326| ACCEPT | 0 | 接受协同。 | 327| REJECT | 1 | 拒绝协同。 | 328 329**示例:** 330 331```ts 332import { UIAbility, AbilityConstant } from '@kit.AbilityKit'; 333 334class MyAbility extends UIAbility { 335 onCollaborate(wantParam: Record<string, Object>) { 336 return AbilityConstant.CollaborateResult.ACCEPT; 337 } 338} 339``` 340 341## PrepareTermination<sup>15+</sup> 342 343应用被用户关闭时的动作枚举值,需要配合[AbilityStage](js-apis-app-ability-abilityStage.md)的[onPrepareTermination](js-apis-app-ability-abilityStage.md#abilitystageonpreparetermination15)或者[onPrepareTerminationAsync](js-apis-app-ability-abilityStage.md#abilitystageonprepareterminationasync15)方法使用。 344 345**原子化服务API**:从API version 15开始,该接口支持在原子化服务中使用。 346 347**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 348 349| 名称 | 值 | 说明 | 350| ------------- | --------- | ----------- | 351| TERMINATE_IMMEDIATELY | 0 | 表示立即执行结束动作,默认值。| 352| CANCEL | 1 | 表示取消结束动作。| 353 354**示例:** 355 356```ts 357import { AbilityConstant, AbilityStage } from '@kit.AbilityKit'; 358 359class MyAbilityStage extends AbilityStage { 360 onPrepareTermination(): AbilityConstant.PrepareTermination { 361 console.info('MyAbilityStage.onPrepareTermination is called'); 362 return AbilityConstant.PrepareTermination.CANCEL; 363 } 364} 365``` 366