js-apis-app-ability-appRecovery.md 7.0 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.app.ability.appRecovery (appRecovery)
Z
zhancaijin 已提交
2

Z
zhancaijin 已提交
3
appRecovery模块提供了应用在故障状态下的恢复能力。
Z
zhancaijin 已提交
4 5 6

> **说明:**
> 
7
> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。API9仅支持单进程中单Ability的应用恢复。API10支持进程中包含多个Ability的场景。
Z
zhancaijin 已提交
8 9

## 导入模块
M
m00512953 已提交
10
```ts
11
import appRecovery from '@ohos.app.ability.appRecovery';
Z
zhancaijin 已提交
12 13 14 15 16
```


## appRecovery.RestartFlag

D
donglin 已提交
17
应用重启标志,[enableAppRecovery](#apprecoveryenableapprecovery)接口重启选项参数,该类型为枚举。
Z
zhancaijin 已提交
18 19 20

**系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityRuntime.Core

M
MapleStory 已提交
21 22 23 24 25 26
| 名称       | 值   | 说明       |
| ---------- | ---- | ---------- |
| ALWAYS_RESTART   | 0    | 总是重启应用。 |
| RESTART_WHEN_JS_CRASH   | 0x0001    | 发生JS_CRASH时重启应用。 |
| RESTART_WHEN_APP_FREEZE   | 0x0002    | 发生APP_FREEZE时重启应用。 |
| NO_RESTART           | 0xFFFF    | 总是不重启应用。 |
Z
zhancaijin 已提交
27 28 29

## appRecovery.SaveOccasionFlag

D
donglin 已提交
30
保存条件标志,[enableAppRecovery](#apprecoveryenableapprecovery)接口状态保存时的选项参数,该类型为枚举。
Z
zhancaijin 已提交
31 32 33

**系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityRuntime.Core

D
donglin 已提交
34
| 名称                          | 值   | 说明                                                         |
Z
zhancaijin 已提交
35
| ----------------------------- | ---- | ------------------------------------------------------------ |
36 37
| SAVE_WHEN_ERROR            | 0x0001    | 当发生应用故障时保存。 |
| SAVE_WHEN_BACKGROUND            | 0x0002    | 当应用切入后台时保存。 |
Z
zhancaijin 已提交
38 39 40

## appRecovery.SaveModeFlag  

D
donglin 已提交
41
状态保存标志,[enableAppRecovery](#apprecoveryenableapprecovery)接口状态保存方式的参数,该类型为枚举。
Z
zhancaijin 已提交
42 43 44

**系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityRuntime.Core

D
donglin 已提交
45
| 名称                          | 值   | 说明                                                         |
Z
zhancaijin 已提交
46
| ----------------------------- | ---- | ------------------------------------------------------------ |
47 48
| SAVE_WITH_FILE             | 0x0001    | 每次状态保存都会写入到本地文件缓存。 |
| SAVE_WITH_SHARED_MEMORY             | 0x0002    | 状态先保存在内存中,应用故障退出时写入到本地文件缓存。 |
Z
zhancaijin 已提交
49 50 51

## appRecovery.enableAppRecovery

D
donglin 已提交
52
enableAppRecovery(restart?: [RestartFlag](#apprecoveryrestartflag), saveOccasion?: [SaveOccasionFlag](#apprecoverysaveoccasionflag), saveMode?: [SaveModeFlag](#apprecoverysavemodeflag)) : void;
Z
zhancaijin 已提交
53

54
使能应用恢复功能,参数按顺序填入。该接口调用后,应用从启动器启动时第一个Ability支持恢复。
Z
zhancaijin 已提交
55 56 57 58 59 60 61

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
D
donglin 已提交
62 63 64
| restart | [RestartFlag](#apprecoveryrestartflag) | 否 | 枚举类型,发生对应故障时是否重启,默认为不重启。 |
| saveOccasion | [SaveOccasionFlag](#apprecoverysaveoccasionflag) | 否 | 枚举类型,状态保存时机,默认为故障时保存。 |
| saveMode | [SaveModeFlag](#apprecoverysavemodeflag) | 否 | 枚举类型,状态保存方式, 默认为文件缓存。 |
Z
zhancaijin 已提交
65 66 67

**示例:**
    
Z
zhancaijin 已提交
68
```ts
69
import appRecovery from '@ohos.app.ability.appRecovery';
D
donglin 已提交
70
import AbilityStage from '@ohos.app.ability.AbilityStage';
D
donglin 已提交
71

M
MapleStory 已提交
72
export default class MyAbilityStage extends AbilityStage {
Z
zhancaijin 已提交
73
    onCreate() {
74
        appRecovery.enableAppRecovery(
M
mingxihua 已提交
75 76 77
            appRecovery.RestartFlag.ALWAYS_RESTART,
            appRecovery.SaveOccasionFlag.SAVE_WHEN_ERROR,
            appRecovery.SaveModeFlag.SAVE_WITH_FILE
78
        );
Z
zhancaijin 已提交
79 80 81 82 83 84 85 86
    }
}
```

## appRecovery.restartApp

restartApp(): void;

87 88 89 90 91 92 93 94
重启当前进程,并拉起应用启动时第一个Ability,如果该Ability存在已经保存的状态,这些状态数据会在Ability的OnCreate生命周期回调的want参数中作为wantParam属性传入。

API10时将启动由[setRestartWant](#apprecoverysetrestartwant)指定的Ability。如果没有指定则按以下规则启动:\
如果当前应用前台的Ability支持恢复,则重新拉起该Ability。\
如果存在多个支持恢复的Ability处于前台,则只拉起最后一个。\
如果没有Ability处于前台,则不拉起。

可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用。
Z
zhancaijin 已提交
95 96 97 98 99 100

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core


**示例:**
    
Z
zhancaijin 已提交
101
```ts
102
import appRecovery from '@ohos.app.ability.appRecovery';
D
donglin 已提交
103
import errorManager from '@ohos.app.ability.errorManager';
D
donglin 已提交
104 105

let observer = {
Z
zhancaijin 已提交
106
    onUnhandledException(errorMsg) {
M
mingxihua 已提交
107
        console.log('onUnhandledException, errorMsg: ', errorMsg);
Z
zhancaijin 已提交
108 109
        appRecovery.restartApp();
    }
110 111 112
};

try {
M
mingxihua 已提交
113
    errorManager.on('error', observer);
114
} catch (paramError) {
M
mingxihua 已提交
115
    console.error('error: ${paramError.code}, ${paramError.message}');
Z
zhancaijin 已提交
116 117 118 119 120 121 122
}
```

## appRecovery.saveAppState

saveAppState(): boolean;

M
m00512953 已提交
123
保存当前App状态,可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用
Z
zhancaijin 已提交
124 125 126 127 128 129 130

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
D
donglin 已提交
131
| boolean | 保存成功与否。true:保存成功,false:保存失败。 |
Z
zhancaijin 已提交
132 133 134

**示例:**
    
Z
zhancaijin 已提交
135
```ts
136
import appRecovery from '@ohos.app.ability.appRecovery';
D
donglin 已提交
137
import errorManager from '@ohos.app.ability.errorManager';
D
donglin 已提交
138 139

let observer = {
Z
zhancaijin 已提交
140
    onUnhandledException(errorMsg) {
M
mingxihua 已提交
141
        console.log('onUnhandledException, errorMsg: ', errorMsg);
Z
zhancaijin 已提交
142 143
        appRecovery.saveAppState();
    }
144 145 146
};

try {
M
mingxihua 已提交
147
    errorManager.on('error', observer);
148
} catch (paramError) {
M
mingxihua 已提交
149
    console.error('error: ${paramError.code}, ${paramError.message}');
Z
zhancaijin 已提交
150 151
}
```
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201

## appRecovery.saveAppState<sup>10+</sup>

saveAppState(context?: UIAbilityContext): boolean;

主动保存Ability的状态,这个状态将在下次恢复启动时使用。可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 保存成功与否。true:保存成功,false:保存失败。 |

**示例:**

```ts
import appRecovery from '@ohos.app.ability.appRecovery';
onBackground() {
    hilog.info(0x0000, '[demo]', '%{public}s', 'EntryAbility onBackground');
    appRecovery.saveAppState(this.context)
}
```

## appRecovery.setRestartWant<sup>10+</sup>

setRestartWant(want: Want): void;

设置下次恢复主动拉起场景下的Ability。该Ability必须为当前包下的UIAbility。

**系统能力**:SystemCapability.Ability.AbilityRuntime.Core

**示例:**

```ts
import appRecovery from '@ohos.app.ability.appRecovery';
Button("启动到恢复Ability")
    .fontSize(40)
    .fontWeight(FontWeight.Bold)
    .onClick(()=> {
        // set restart want
        let want = {
            bundleName: "ohos.samples.recovery",
            abilityName: "RecoveryAbility"
        };

        appRecovery.setRestartWant(want);
    })
```