js-apis-app-ability-appRecovery.md 7.4 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

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

saveAppState(context?: UIAbilityContext): boolean;

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

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

161 162 163 164 165 166
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| context | [UIAbilityContext](js-apis-inner-application-uiAbilityContext.md)| 否 | UIAbility上下文环境。 |

167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| 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

191 192 193 194 195 196
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| want | [Want](js-apis-application-want.md)| 是 | 通过设置Want中"bundleName"和"abilityName"字段来指定恢复重启的Ability。 |

197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
**示例:**

```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);
    })
```