From e7d9b943040a1720609cb4d5efa35c7b36802a9c Mon Sep 17 00:00:00 2001 From: zhancaijin Date: Thu, 16 Mar 2023 16:06:15 +0800 Subject: [PATCH] add AppRecovery enhance multi-mission recover function docs Signed-off-by: zhancaijin --- .../dfx/apprecovery-guidelines.md | 51 +++++++++++--- .../dfx/figures/20230315112155.png | Bin 0 -> 39577 bytes .../dfx/figures/20230315112235.png | Bin 0 -> 35385 bytes .../apis/js-apis-app-ability-appRecovery.md | 63 ++++++++++++++++- .../OpenHarmony_4.0.5.2/changelogs-ability.md | 64 ++++++++++++++++++ 5 files changed, 165 insertions(+), 13 deletions(-) create mode 100644 zh-cn/application-dev/dfx/figures/20230315112155.png create mode 100644 zh-cn/application-dev/dfx/figures/20230315112235.png create mode 100644 zh-cn/release-notes/changelogs/OpenHarmony_4.0.5.2/changelogs-ability.md diff --git a/zh-cn/application-dev/dfx/apprecovery-guidelines.md b/zh-cn/application-dev/dfx/apprecovery-guidelines.md index c2293d0ece..25471d18ce 100644 --- a/zh-cn/application-dev/dfx/apprecovery-guidelines.md +++ b/zh-cn/application-dev/dfx/apprecovery-guidelines.md @@ -5,29 +5,48 @@ 应用在运行中不可避免会产生一些非预期的行为,如运行时抛出未处理的异常和错误,违反框架的调用/运行约束等。 系统默认对异常的处理方式为进程退出,如果应用使用过程中产生了用户数据,直接退出可能会导致用户工作中断,数据丢失。 -如果使用应用故障恢复相关接口,则可对临时数据进行保存,应用退出后会重启应用并恢复先前的状态和数据,能给用户带来更好的使用体验。 +如果应用使能了应用恢复功能,并对临时数据进行保存,应用非预期退出后的下一次启动会恢复先前的状态和数据,给用户更连贯的使用体验。这里状态包括应用的页面栈以及onSaveState接口中保存的数据。 -目前该接口仅支持单进程单Ability的Stage模型应用开发。 +API 9上的应用恢复接口支持单Ability的Stage模型应用开发。支持JsError故障时的状态保存与自动重启。 + +API 10在API 9的基础上新增支持多Ability的Stage模型应用开发。支持AppFreeze故障时的状态保存回调。支持应用被管控模式杀死后,下次启动的状态恢复。 ## 接口说明 -应用故障恢复接口由appRecovery模块提供,开发者可以通过import引入,详见[开发示例](#开发示例)。本文档描述的为API9版本的接口行为,后续接口行为变更会更新本文档。 +应用故障恢复接口由appRecovery模块提供,开发者可以通过import引入,详见[开发示例](#开发示例)。 ### 应用恢复接口功能介绍 | 接口名称 | 说明 | | ------------------------------------------------------------ | ---------------------------------------------------- | -| enableAppRecovery(restart?: RestartFlag, saveOccasion?: SaveOccasionFlag, saveMode?: SaveModeFlag) : void; | 使能应用恢复功能。| -| saveAppState(): boolean; | 主动保存当前应用中Ability的状态。 | -| restartApp(): void; | 重启当前进程,如果有已经保存的Ability状态,会在Ability的OnCreate生命周期回调的want参数中的wantParam属性传入。 | +| enableAppRecovery(restart?: RestartFlag, saveOccasion?: SaveOccasionFlag, saveMode?: SaveModeFlag) : void;9+ | 使能应用恢复功能,参数按顺序填入。该接口调用后,应用从启动器启动时第一个Ability支持恢复。| +| saveAppState(): boolean;9+ | 主动保存当前应用中支持恢复的Ability的状态。 | +| restartApp(): void;9+ | 重启当前进程,并启动由**setRestartWant**指定的Ability,如果未指定,将重新拉起处于前台且支持恢复的Ability。 | +| saveAppState(context?: UIAbilityContext): boolean;10+ | 主动保存由Context指定的Ability状态。 | +| setRestartWant(want: Want): void;10+ | 设置主动调用**restartApp**以及**RestartFlag**不为**NO_RESTART**时重启的Ability。该Ability必须在同一个包名下,且必须为**UiAbility**。 | -由于本接口为故障处理时使用,不会返回异常,需要开发者熟悉使用的场景。 +由于上述接口可能在故障处理时使用,所以不会返回异常,需要开发者熟悉使用的场景。 **enableAppRecovery:** 需要在应用初始化阶段调用,比如AbilityStage的OnCreate调用赋能。具体其各参数定义详见[参数说明](../reference/apis/js-apis-app-ability-appRecovery.md)。 -**saveAppState:** 调用后框架会回调Ability的onSaveState方法,如果在onSaveState方法中同意保存数据,则会将相关数据及Ability的页面栈持久化到应用的本地缓存。 +**saveAppState:** 调用后框架会回调**当前进程中所有支持恢复的Ability**的onSaveState方法,如果在onSaveState方法中同意保存数据,则会将相关数据及Ability的页面栈持久化到应用的本地缓存。如果需要保存指定Ability,则需要指定Ability对应的Context。 + +**setRestartWant:** 指定由appRecovery发起重启的Ability。 + +**restartApp:** 调用后框架会杀死当前应用进程,并重新拉起由**setRestartWant**指定的Ability,其中启动原因为APP_RECOVERY。API 9以及未使用**setRestartWant**指定Ability的场景,会拉起最后一个支持恢复且在前台的Ability,如果当前前台的Ability不支持恢复,则应用表现闪退。如果重启的Ability存在已经保存的状态,这些状态数据会在Ability的OnCreate生命周期回调的want参数中作为wantParam属性传入。 + +### 应用恢复状态管理示意 +从API 10起,应用恢复的场景不仅局限于异常时自动重启。所以需要理解应用何时会加载恢复的状态。 +一句话概括就是**如果应用任务的上次退出不是由用户发起的,且应用存在用于恢复的状态,应用下一次由用户拉起时的启动原因会被设为APP_RECOVERY,并清理该任务的恢复状态。** +应用恢复状态标识会在状态保存接口主动或者被动调用时设置。在该任务正常退出或者消费了该状态时清理。正常退出目前包括用户按**后退键退出**以及用户**清理最近任务**。 + +![应用恢复状态管理示意](./figures/20230315112155.png) -**restartApp:** 调用后框架会杀死当前应用进程,并重新拉起处于前台的Ability,其中启动原因为APP_RECOVERY。 +### 应用卡死的状态保存及恢复 +API 10开始支持应用卡死时的状态保存。JsError故障时,onSaveState接口在主线程进行回调。对于AppFreeze故障,主线程可能处于卡死的状态,onSaveState会在非主线程进行回调。其主要流程如下图: + +![应用卡死状态保存恢复示意](./figures/20230315112235.png) +由于卡死时的回调不在JS线程上执行,onSaveState回调中的代码建议不要使用import进来的Native动态库,禁止访问主线程创建的thread_local对象。 ### 框架故障管理流程示意 @@ -52,7 +71,7 @@ | 故障名称 | 故障监听 | 状态保存 | 自动重启 | 日志查询 | | ----------|--------- |--------- |--------- |--------- | | [JS_CRASH](../reference/apis/js-apis-faultLogger.md#faulttype) | 支持|支持|支持|支持| -| [APP_FREEZE](../reference/apis/js-apis-faultLogger.md#faulttype) | 不支持|不支持|支持|支持| +| [APP_FREEZE](../reference/apis/js-apis-faultLogger.md#faulttype) | 不支持|支持|支持|支持| | [CPP_CRASH](../reference/apis/js-apis-faultLogger.md#faulttype) | 不支持|不支持|不支持|支持| 这里状态保存指的是故障时状态保存,对于应用卡死场景,开发者可以采用定时保存状态或者在Ability切入后台后自动保存的方式最大限度的保护用户数据。 @@ -77,6 +96,18 @@ export default class MyAbilityStage extends AbilityStage { appRecovery.SaveModeFlag.SAVE_WITH_FILE); } } +``` +### 配置支持恢复的Ability +Ability的配置清单一般的名字为module.json5。 +```json +{ + "abilities": [ + { + "name": "EntryAbility", + "recoverable": true, + }] +} + ``` ### 数据保存和恢复 diff --git a/zh-cn/application-dev/dfx/figures/20230315112155.png b/zh-cn/application-dev/dfx/figures/20230315112155.png new file mode 100644 index 0000000000000000000000000000000000000000..20324a0b23f2b409c2fef8daaa74bcccd5427398 GIT binary patch literal 39577 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 gb33^Nw#0^!AYq?iV{r?YF3r+|C literal 0 HcmV?d00001 diff --git a/zh-cn/application-dev/dfx/figures/20230315112235.png b/zh-cn/application-dev/dfx/figures/20230315112235.png new file mode 100644 index 0000000000000000000000000000000000000000..34cf30ce75516810536335bd9a2789517360eae3 GIT binary patch literal 35385 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 **说明:** > -> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。当前版本仅支持单进程中单Ability的应用恢复。 +> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。API9仅支持单进程中单Ability的应用恢复。API10支持进程中包含多个Ability的场景。 ## 导入模块 ```ts @@ -51,7 +51,7 @@ import appRecovery from '@ohos.app.ability.appRecovery'; enableAppRecovery(restart?: [RestartFlag](#apprecoveryrestartflag), saveOccasion?: [SaveOccasionFlag](#apprecoverysaveoccasionflag), saveMode?: [SaveModeFlag](#apprecoverysavemodeflag)) : void; -使能应用恢复功能,参数按顺序填入。 +使能应用恢复功能,参数按顺序填入。该接口调用后,应用从启动器启动时第一个Ability支持恢复。 **系统能力**:SystemCapability.Ability.AbilityRuntime.Core @@ -84,7 +84,14 @@ export default class MyAbilityStage extends AbilityStage { restartApp(): void; -重启当前App进程,可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用。 +重启当前进程,并拉起应用启动时第一个Ability,如果该Ability存在已经保存的状态,这些状态数据会在Ability的OnCreate生命周期回调的want参数中作为wantParam属性传入。 + +API10时将启动由[setRestartWant](#apprecoverysetrestartwant)指定的Ability。如果没有指定则按以下规则启动:\ +如果当前应用前台的Ability支持恢复,则重新拉起该Ability。\ +如果存在多个支持恢复的Ability处于前台,则只拉起最后一个。\ +如果没有Ability处于前台,则不拉起。 + +可以配合[errorManager](js-apis-app-ability-errorManager.md)相关接口使用。 **系统能力**:SystemCapability.Ability.AbilityRuntime.Core @@ -142,3 +149,53 @@ try { console.error('error: ${paramError.code}, ${paramError.message}'); } ``` + +## appRecovery.saveAppState10+ + +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.setRestartWant10+ + +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); + }) +``` \ No newline at end of file diff --git a/zh-cn/release-notes/changelogs/OpenHarmony_4.0.5.2/changelogs-ability.md b/zh-cn/release-notes/changelogs/OpenHarmony_4.0.5.2/changelogs-ability.md new file mode 100644 index 0000000000..ba5ef87f8b --- /dev/null +++ b/zh-cn/release-notes/changelogs/OpenHarmony_4.0.5.2/changelogs-ability.md @@ -0,0 +1,64 @@ +# 元能力子系统ChangeLog + +## cl.ability.appRecovery新增saveAppState接口 + +新增接口saveAppState(context?: UIAbilityContext): boolean; + +**变更影响** + +基于OpenHarmony4.0.5.2及之后的SDK版本开发的应用,可以使用saveAppState接口传入指定Ability Context,实现主动保存指定的Ability状态。 + +**关键接口/组件变更** + +@ohos.app.ability.appRecovery.d.ts中新增saveAppState接口。 + +| 模块名 | 类名 | 方法/属性/枚举/常量 | 变更类型 | +| -- | -- | -- | -- | +| @ohos.app.ability.appRecovery.d.ts | appRecovery | saveAppState(context?: UIAbilityContext): boolean; | 新增 | + +**适配指导** + +通过调用saveAppState传入UIAbility Context参数主动保存此指定的Ability的状态。 + +```ts +import appRecovery from '@ohos.app.ability.appRecovery'; +onBackground() { + hilog.info(0x0000, '[demo]', '%{public}s', 'EntryAbility onBackground'); + appRecovery.saveAppState(this.context) +} +``` +## cl.ability.appRecovery新增setRestartWant接口 + +新增接口setRestartWant(want: Want): void; + +**变更影响** + +基于OpenHarmony4.0.5.2及之后的SDK版本开发的应用,可以使用setRestartWant接口设置下次由恢复主动拉起场景下的Ability。 + +**关键接口/组件变更** + +@ohos.app.ability.appRecovery.d.ts中新增setRestartWant接口。 + +| 模块名 | 类名 | 方法/属性/枚举/常量 | 变更类型 | +| -- | -- | -- | -- | +| @ohos.app.ability.appRecovery.d.ts | appRecovery | setRestartWant(want: Want): void; | 新增 | + +**适配指导** + +通过调用setRestartWant设置下次恢复到的指定Ability。 + +```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); + }) +``` \ No newline at end of file -- GitLab