提交 c6950151 编写于 作者: Z zhancaijin

modify aaRecovery api docs

Signed-off-by: Nzhancaijin <zhancaijin1@huawei.com>
上级 0e729992
......@@ -2,7 +2,7 @@
## 场景介绍
应用在运行中不可避免会产生一些非预期的行为,如运行时抛出未处理的异常和错误,违反框架的调用/运行约束。
应用在运行中不可避免会产生一些非预期的行为,如运行时抛出未处理的异常和错误,违反框架的调用/运行约束
系统默认对异常的处理方式为进程退出,如果应用使用过程中产生了用户数据,直接退出可能会导致用户工作中断,数据丢失。
如果使用应用故障恢复相关接口,则可对临时数据进行保存,应用退出后会重启应用并恢复先前的状态和数据,能给用户带来更好的使用体验。
......@@ -29,18 +29,26 @@
**restartApp:** 调用后框架会杀死当前应用进程,并重新拉起处于前台的Ability,其中启动原因为APP_RECOVERY。
### 框架故障理流程示意
### 框架故障管理理流程示意
故障管理是应用提升用户体验的重要手段。鸿蒙应用框架为开发者提供了故障监听,故障恢复以及故障查询三种方式来管理应用的故障。
这里故障监听指的是errorManager,故障恢复指的是[appRecovery](../reference/apis/js-apis-app-ability-appRecovery.md),故障查询指的是[faultLogger](../reference/apis/js-apis-faultLogger.md)
下图中并没有标记[faultLogger](../reference/apis/js-apis-faultLogger.md)的调用时机,开发者可以根据应用启动时传入的[LastExitReason](../reference/apis/js-apis-application-abilityConstant.md#abilityconstant.lastexitreason)来决定是否调用[faultLogger](../reference/apis/js-apis-faultLogger.md)查询上次的故障信息。
- 故障监听指的是通过[errorManager](../reference/apis/js-apis-errorManager.md)注册[ErrorObserver](../reference/apis/js-apis-errorManager.md#errorobserver),监听故障的发生,并通知到监听方。
- 故障恢复指的是[appRecovery](../reference/apis/js-apis-app-ability-appRecovery.md),及故障发生后,将应用重启恢复到故障之前的状态。
- 故障查询指的是[faultLogger](../reference/apis/js-apis-faultLogger.md)通过其查询接口获取当前的故障信息。
下图中并没有标记[faultLogger](../reference/apis/js-apis-faultLogger.md)的调用时机,开发者可以根据应用启动时传入的[LastExitReason](../reference/apis/js-apis-application-abilityConstant.md#abilityconstantlastexitreason)来决定是否调用[faultLogger](../reference/apis/js-apis-faultLogger.md)查询上次的故障信息。
![故障处理流程示意](./figures/20221106203527.png)
这里建议应用开发者使用[errorManager](../reference/apis/js-apis-errorManager.md)对应用的异常进行处理,处理完成后开发者可以选择调用状态保存接口并主动重启应用。
如果开发者没有注册[ErrorObserver](../reference/apis/js-apis-errorManager.md#errorobserver)也没有使能自动恢复,则按照系统的默认逻辑执行进程退出。用户可以选择从启动器再次打开应用。
如果开发者使能了自动恢复,框架会首先检查当前故障是否支持状态保存以及开发者是否配置了状态保存,如果支持则会回调[Ability](../reference/apis/js-apis-application-ability.md#ability)[onSaveState](../reference/apis/js-apis-application-ability.md#ability.onsavestate)的接口。最后重启应用。
如果开发者使能了自动恢复,框架会首先检查当前故障是否支持状态保存以及开发者是否配置了状态保存,如果支持则会回调[Ability](../reference/apis/js-apis-application-ability.md#ability)[onSaveState](../reference/apis/js-apis-application-ability.md#abilityonsavestate)的接口。最后重启应用。
### 应用故障管理接口支持场景
通常的故障类型有JS程序Crash、应用程序卡死、C++程序Crash。Crash故障时应用一般都会被关闭。Freeze故障为应用无响应卡屏场景。应用上层无需关注故障类型,底层恢复框架会根据故障类型来实现不同场景的故障管理。
| 故障名称 | 故障监听 | 状态保存 | 自动重启 | 日志查询 |
| ----------|--------- |--------- |--------- |--------- |
| [JS_CRASH](../reference/apis/js-apis-faultLogger.md#faulttype) | 支持|支持|支持|支持|
......@@ -53,7 +61,7 @@
## 开发示例
### 1. 使能开启自恢复特性
### 使能开启自恢复特性
开发者需要在应用模块初始化时使能appRecovery功能。下面为示例的AbilityStage。
......@@ -71,12 +79,12 @@ export default class MyAbilityStage extends AbilityStage {
}
```
### 2. 数据保存和恢复
### 数据保存和恢复
在使能appRecovery功能后,开发者可以在Ability中采用主动保存状态,主动恢复或者选择被动恢复的方式使用appRecovery功能。
下面为示例的MainAbility。
#### 2.1 导包
#### 导包
```ts
import errorManager from '@ohos.app.ability.errorManager'
......@@ -84,48 +92,48 @@ import appRecovery from '@ohos.app.ability.appRecovery'
import AbilityConstant from '@ohos.app.ability.AbilityConstant'
```
#### 2.2 主动触发保存和恢复
#### 主动触发保存和恢复
- 定义和注册[ErrorObserver](../reference/apis/js-apis-errorManager.md#errorobserver) callback.
- 定义和注册[ErrorObserver](../reference/apis/js-apis-errorManager.md#errorobserver) callback
```ts
var registerId = -1;
var callback = {
onUnhandledException: function (errMsg) {
console.log(errMsg);
appRecovery.saveAppState();
appRecovery.restartApp();
}
}
onWindowStageCreate(windowStage) {
// Main window is created, set main page for this ability
console.log("[Demo] MainAbility onWindowStageCreate")
globalThis.registerObserver = (() => {
registerId = errorManager.registerErrorObserver(callback);
})
windowStage.loadContent("pages/index", null);
}
var registerId = -1;
var callback = {
onUnhandledException: function (errMsg) {
console.log(errMsg);
appRecovery.saveAppState();
appRecovery.restartApp();
}
}
onWindowStageCreate(windowStage) {
// Main window is created, set main page for this ability
console.log("[Demo] MainAbility onWindowStageCreate")
globalThis.registerObserver = (() => {
registerId = errorManager.registerErrorObserver(callback);
})
windowStage.loadContent("pages/index", null);
}
```
callback触发后 appRecovery.saveAppState() 调用后,会触发MainAbility的onSaveState(state, wantParams)函数回调。
- 数据保存
callback触发appRecovery.saveAppState()调用后,会触发MainAbility的onSaveState(state, wantParams)函数回调。
```ts
onSaveState(state, wantParams) {
// Ability has called to save app data
console.log("[Demo] MainAbility onSaveState")
wantParams["myData"] = "my1234567";
return AbilityConstant.onSaveResult.ALL_AGREE;
}
onSaveState(state, wantParams) {
// Ability has called to save app data
console.log("[Demo] MainAbility onSaveState")
wantParams["myData"] = "my1234567";
return AbilityConstant.onSaveResult.ALL_AGREE;
}
```
- 数据恢复
callback触发后 appRecovery.restartApp() 调用后,应用会重启,重启后会走到MainAbility的onSaveState(state, wantParams)函数,保存的数据会在want参数的parameters里。
callback触发后appRecovery.restartApp()调用后,应用会重启,重启后会走到MainAbility的onSaveState(state, wantParams)函数,保存的数据会在want参数的parameters里。
```ts
storage: LocalStorage
......@@ -141,7 +149,7 @@ onCreate(want, launchParam) {
}
```
- 反注册ErrorObserver callback.
- 取消注册ErrorObserver callback
```ts
onWindowStageDestroy() {
......@@ -156,7 +164,7 @@ onWindowStageDestroy() {
}
```
#### 2.3 被动保存和恢复
#### 被动保存和恢复
被动保存和恢复依赖恢复框架底层触发,无需注册监听ErrorObserver callback,只需实现Ability的onSaveState接口数据保存和onCreate接口数据恢复流程即可。
......
# appRecovery
appRecovery模块提供应用故障状态恢复能力。
appRecovery模块提供了应用在故障状态下的恢复能力。
> **说明:**
>
......@@ -60,13 +60,13 @@ enableAppRecovery(restart?: RestartFlag, saveOccasion?: SaveOccasionFlag, saveMo
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| restart | [RestartFlag](#apprecoveryrestartflag) | 否 | 发生对应故障时是否重启,默认为不重启 |
| saveOccasion | [SaveOccasionFlag](#apprecoverysaveoccasionflag) | 否 | 状态保存时机,默认为故障时保存 |
| saveMode | [SaveModeFlag](#apprecoverysavemodeflag) | 否 | 状态保存方式, 默认为文件缓存 |
| restart | [RestartFlag](#apprecoveryrestartflag) | 否 | 发生对应故障时是否重启,默认为不重启 |
| saveOccasion | [SaveOccasionFlag](#apprecoverysaveoccasionflag) | 否 | 状态保存时机,默认为故障时保存 |
| saveMode | [SaveModeFlag](#apprecoverysavemodeflag) | 否 | 状态保存方式, 默认为文件缓存 |
**示例:**
```js
```ts
export default class MyAbilityStage extends AbilityStage {
onCreate() {
appRecovery.enableAppRecovery(RestartFlag::ALWAYS_RESTART, SaveOccasionFlag::SAVE_WHEN_ERROR, SaveModeFlag::SAVE_WITH_FILE);
......@@ -85,7 +85,7 @@ restartApp(): void;
**示例:**
```js
```ts
var observer = {
onUnhandledException(errorMsg) {
console.log('onUnhandledException, errorMsg: ', errorMsg)
......@@ -111,7 +111,7 @@ saveAppState(): boolean;
**示例:**
```js
```ts
var observer = {
onUnhandledException(errorMsg) {
console.log('onUnhandledException, errorMsg: ', errorMsg)
......
......@@ -327,14 +327,14 @@ onSaveState(reason: AbilityConstant.StateType, wantParam : {[key: string]: any})
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| reason | [AbilityConstant.StateType](js-apis-application-abilityConstant.md#abilityconstantstatetype) | 是 | 回调保存状态的原因 |
| reason | [AbilityConstant.StateType](js-apis-application-abilityConstant.md#abilityconstantstatetype) | 是 | 回调保存状态的原因 |
| wantParam | {[key:&nbsp;string]:&nbsp;any} | 是 | want相关参数。 |
**返回值:**
| 类型 | 说明 |
| -------- | -------- |
| AbilityConstant.OnSaveResult | 是否同意保存当前Ability的状态 |
| AbilityConstant.OnSaveResult | 是否同意保存当前Ability的状态 |
**示例:**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册