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