1# @ohos.app.ability.appRecovery (appRecovery) 2 3appRecovery模块提供了应用在故障状态下的恢复能力。 4 5> **说明:** 6> 7> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。API9仅支持单进程中单Ability的应用恢复。API10支持进程中包含多个Ability的场景。 8 9## 导入模块 10```ts 11import { appRecovery } from '@kit.AbilityKit'; 12``` 13 14## RestartFlag 15 16应用重启标志,[enableAppRecovery](#apprecoveryenableapprecovery)接口重启选项参数,该类型为枚举。 17 18**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 19 20**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 21 22| 名称 | 值 | 说明 | 23| ---------- | ---- | ---------- | 24| ALWAYS_RESTART | 0 | 总是重启应用。 | 25| RESTART_WHEN_JS_CRASH | 0x0001 | 发生JS_CRASH时重启应用。 | 26| RESTART_WHEN_APP_FREEZE | 0x0002 | 发生APP_FREEZE时重启应用。 | 27| NO_RESTART | 0xFFFF | 总是不重启应用。 | 28 29## SaveOccasionFlag 30 31保存条件标志,[enableAppRecovery](#apprecoveryenableapprecovery)接口状态保存时的选项参数,该类型为枚举。 32 33**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 34 35**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 36 37| 名称 | 值 | 说明 | 38| ----------------------------- | ---- | ------------------------------------------------------------ | 39| SAVE_WHEN_ERROR | 0x0001 | 当发生应用故障时保存。 | 40| SAVE_WHEN_BACKGROUND | 0x0002 | 当应用切入后台时保存。 | 41 42## SaveModeFlag 43 44状态保存标志,[enableAppRecovery](#apprecoveryenableapprecovery)接口状态保存方式的参数,该类型为枚举。 45 46**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 47 48**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 49 50| 名称 | 值 | 说明 | 51| ----------------------------- | ---- | ------------------------------------------------------------ | 52| SAVE_WITH_FILE | 0x0001 | 每次状态保存都会写入到本地文件缓存。 | 53| SAVE_WITH_SHARED_MEMORY | 0x0002 | 状态先保存在内存中,应用故障退出时写入到本地文件缓存。 | 54 55## appRecovery.enableAppRecovery 56 57enableAppRecovery(restart?: [RestartFlag](#restartflag), saveOccasion?: [SaveOccasionFlag](#saveoccasionflag), saveMode?: [SaveModeFlag](#savemodeflag)) : void 58 59使能应用恢复功能,参数按顺序填入。该接口调用后,应用从启动器启动时第一个Ability支持恢复。 60 61**模型约束**:此接口仅可在Stage模型下使用。 62 63**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 64 65**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 66 67**参数:** 68 69| 参数名 | 类型 | 必填 | 说明 | 70| -------- | -------- | -------- | -------- | 71| restart | [RestartFlag](#restartflag) | 否 | 枚举类型,发生对应故障时是否重启,默认为重启。 | 72| saveOccasion | [SaveOccasionFlag](#saveoccasionflag) | 否 | 枚举类型,状态保存时机,默认为故障时保存。 | 73| saveMode | [SaveModeFlag](#savemodeflag) | 否 | 枚举类型,状态保存方式, 默认为文件缓存。 | 74 75**示例:** 76 77```ts 78import { appRecovery, AbilityStage } from '@kit.AbilityKit'; 79 80export default class MyAbilityStage extends AbilityStage { 81 onCreate() { 82 appRecovery.enableAppRecovery( 83 appRecovery.RestartFlag.ALWAYS_RESTART, 84 appRecovery.SaveOccasionFlag.SAVE_WHEN_ERROR, 85 appRecovery.SaveModeFlag.SAVE_WITH_FILE 86 ); 87 } 88} 89``` 90 91## appRecovery.restartApp 92 93restartApp(): void 94 95重启当前进程,并拉起应用启动时第一个Ability,如果该Ability存在已经保存的状态,这些状态数据会在Ability的OnCreate生命周期回调的want参数中作为wantParam属性传入。 96 97API10时将启动由[setRestartWant](#apprecoverysetrestartwant10)指定的Ability。如果没有指定则按以下规则启动:\ 98如果当前应用前台的Ability支持恢复,则重新拉起该Ability。\ 99如果存在多个支持恢复的Ability处于前台,则只拉起最后一个。\ 100如果没有Ability处于前台,则不拉起。 101 102可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用。两次重启的间隔应大于一分钟,一分钟之内重复调用此接口只会退出应用不会重启应用。自动重启的行为与主动重启一致。 103 104**模型约束**:此接口仅可在Stage模型下使用。 105 106**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 107 108**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 109 110 111**示例:** 112 113```ts 114import { appRecovery, errorManager } from '@kit.AbilityKit'; 115import { BusinessError } from '@kit.BasicServicesKit'; 116 117let observer: errorManager.ErrorObserver = { 118 onUnhandledException(errorMsg) { 119 console.log('onUnhandledException, errorMsg: ', errorMsg); 120 appRecovery.restartApp(); 121 } 122}; 123 124try { 125 errorManager.on('error', observer); 126} catch (paramError) { 127 console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`); 128} 129``` 130 131## appRecovery.saveAppState 132 133saveAppState(): boolean 134 135保存当前App状态,可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用。 136 137**模型约束**:此接口仅可在Stage模型下使用。 138 139**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 140 141**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 142 143**返回值:** 144 145| 类型 | 说明 | 146| -------- | -------- | 147| boolean | 保存成功与否。true:保存成功,false:保存失败。 | 148 149**示例:** 150 151```ts 152import { appRecovery, errorManager } from '@kit.AbilityKit'; 153import { BusinessError } from '@kit.BasicServicesKit'; 154 155let observer: errorManager.ErrorObserver = { 156 onUnhandledException(errorMsg) { 157 console.log('onUnhandledException, errorMsg: ', errorMsg); 158 appRecovery.saveAppState(); 159 } 160}; 161 162try { 163 errorManager.on('error', observer); 164} catch (paramError) { 165 console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`); 166} 167``` 168 169## appRecovery.saveAppState<sup>10+</sup> 170 171saveAppState(context?: UIAbilityContext): boolean 172 173主动保存Ability的状态,这个状态将在下次恢复启动时使用。可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用。 174 175**模型约束**:此接口仅可在Stage模型下使用。 176 177**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 178 179**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 180 181**参数:** 182 183| 参数名 | 类型 | 必填 | 说明 | 184| -------- | -------- | -------- | -------- | 185| context | [UIAbilityContext](js-apis-inner-application-uiAbilityContext.md)| 否 | 需要保存状态的UIAbility所对应的context。 | 186 187**返回值:** 188 189| 类型 | 说明 | 190| -------- | -------- | 191| boolean | 保存成功与否。true:保存成功,false:保存失败。 | 192 193**示例:** 194 195```ts 196import { appRecovery, errorManager } from '@kit.AbilityKit'; 197import { BusinessError } from '@kit.BasicServicesKit'; 198 199let observer: errorManager.ErrorObserver = { 200 onUnhandledException(errorMsg) { 201 console.log('onUnhandledException, errorMsg: ', errorMsg); 202 appRecovery.saveAppState(this.context); 203 } 204}; 205 206try { 207 errorManager.on('error', observer); 208} catch (paramError) { 209 console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`); 210} 211``` 212 213## appRecovery.setRestartWant<sup>10+</sup> 214 215setRestartWant(want: Want): void 216 217设置下次恢复主动拉起场景下的Ability。该Ability必须为当前包下的UIAbility。 218 219**模型约束**:此接口仅可在Stage模型下使用。 220 221**原子化服务API**:从API version 11开始,该接口支持在原子化服务中使用。 222 223**系统能力**:SystemCapability.Ability.AbilityRuntime.Core 224 225**参数:** 226 227| 参数名 | 类型 | 必填 | 说明 | 228| -------- | -------- | -------- | -------- | 229| want | [Want](js-apis-app-ability-want.md)| 是 | 通过设置Want中"bundleName"和"abilityName"字段来指定恢复重启的Ability。 | 230 231**示例:** 232 233```ts 234import { appRecovery, Want } from '@kit.AbilityKit'; 235 236@Entry 237@Component 238struct Index { 239 build() { 240 Button("启动到恢复Ability") 241 .fontSize(40) 242 .fontWeight(FontWeight.Bold) 243 .onClick(()=> { 244 // set restart want 245 let want: Want = { 246 bundleName: "ohos.samples.recovery", 247 abilityName: "RecoveryAbility" 248 }; 249 250 appRecovery.setRestartWant(want); 251 }) 252 } 253} 254```