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```