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