1# 应用故障恢复 2 3### 介绍 4本示例展示了在应用中如何适配故障恢复相关接口。 5 6样例包含以下场景:\ 7一.单Ability自动恢复 \ 8在EntryAbility的故障触发页面触发故障,自动重启回到故障触发页面。 9 10二.多Ability自动恢复 \ 11应用中启动了EntryAbility和SecondAbility,在第二个启动的SecondAbility的故障触发页面触发故障。 \ 12自动重启到SecondAbility的故障触发页面。 \ 13从任务管理中将EntryAbility切回前台,预期能回到故障触发页面,并恢复页面上点击次数信息。 14 15三.多Ability主动恢复 \ 16应用中启动了EntryAbility和SecondAbility,在第二个启动的SecondAbility的故障触发页面触发故障。 \ 17重启时启动RecoveryAbility,让使用者选择具体启动的Ability。 18 19四.Ability后台强制终止恢复 \ 20应用中启动了EntryAbility和SecondAbility,并切入后台。\ 21系统回收该应用,再次拉起时能够恢复先前的状态。 22 23相关概念: \ 24故障:指的是应用处于无法提供服务的状态,如卡死以及崩溃。 \ 25系统强制终止:指的是由于系统或者应用的原因,系统强制终止正在运行的应用进程,并回收资源的操作。 26 27### 效果预览 28|首页|故障触发页面| 29|---|---| 30||| 31 32使用说明 33 34一.单Ability自动恢复 \ 35点击首页点击``跳转到故障触发页面``; \ 36在故障触发页面点击按钮``点击``,再点击``保存当前Ability状态``以及``触发JsError``。 \ 37以上场景预期:\ 38能够回到``故障触发页面``页面,页面上的点击次数与触发保存状态时的一致。 39 40二.多Ability自动恢复 \ 41点击首页点击跳转到``故障触发页面``; \ 42在``故障触发页面``点击``启动SecondAbility``; \ 43点击首页点击``跳转到故障触发页面``; \ 44在故障触发页面点击按钮``点击``,再点击``保存当前Ability状态``以及``触发JsError``; \ 45从任务管理中将EntryAbility切回前台。 \ 46以上场景预期:\ 47立即回到SecondAbility的故障触发页面,并恢复页面的点击次数信息。\ 48能回到故障触发页面,页面上的点击次数与触发保存状态时的一致。 49 50三.多Ability主动恢复 \ 51点击首页点击跳转到``故障触发页面``; \ 52在``故障触发页面``点击``启动SecondAbility``; \ 53在SecondAbility的故障触发页面点击``设置重启Ability``; \ 54在SecondAbility的故障触发页面点击``触发JsError``。 \ 55以上场景预期:\ 56重启时启动RecoveryAbility。 57 58四.Ability后台强制终止恢复 \ 59点击首页点击跳转到``故障触发页面``; \ 60在``故障触发页面``点击``启动SecondAbility``; \ 61在SecondAbility的故障触发页面点击Counter,点击``保存当前Ability状态``,并切入后台; \ 62使用kill命令强制终止当前应用; \ 63以上场景预期:\ 64从任务管理中将EntryAbility切回前台,预期能回到故障触发页面,并恢复页面上的点击次数信息。\ 65从任务管理中将SecondAbility切回前台,预期能回到故障触发页面,并恢复页面上的点击次数信息。 66 67> 为避免反复拉起,两次测试的间隔至少为60秒(自动拉起的间隔为60秒)。 68 69### 工程目录 70``` 71entry/src/main/ 72├── cpp // 触发Native卡死代码 73│ ├── CMakeLists.txt 74│ ├── hello.cpp 75│ └── types 76│ └── libentry 77│ ├── index.d.ts 78│ └── oh-package.json5 79├── ets 80│ ├── ability 81│ │ ├── EntryAbility.ets // 测试入口Ability 82│ │ ├── RecoveryAbility.ets // 恢复引导Ability 83│ │ └── SecondAbility.ets // 测试第二Ability 84│ ├── app 85│ │ └── MyAbilityStage.ets // 用于初始化appRecovery的配置 86│ ├── common 87│ │ ├── Logger.ts // 日志 88│ │ └── TitleBar.ets // 标题 89│ └── pages 90│ ├── FaultTriggerPage.ets // 故障触发页面 91│ ├── Index.ets // 首页 92│ └── RecoveryPage.ets // 恢复页面 93``` 94 95### 具体实现 96* 使能应用恢复功能,源码参考:[MyAbilityStage.ets](entry/src/main/ets/app/MyAbilityStage.ets) 97 * 在``onCreate``中 调用[appRecovery](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/dfx/apprecovery-guidelines.md)接口使能功能 98* 配置支持恢复的Ability,源码参考:[module.json5](entry/src/main/module.json5) 99 * 在``Ability``的节点中增加``recoverable``的配置,并设置为``true`` 100* 实现恢复功能,源码参考:[EntryAbility.ets](entry/src/main/ets/ability/EntryAbility.ets) 101 * 在``onSaveState``中保存用于恢复的数据 102 * 在``onCreate``的``want``参数中恢复所需要的数据 103 104### 相关权限 105不涉及 106 107### 依赖 108无 109 110### 约束与限制 111 1121.本示例仅支持标准系统上运行,支持设备:RK3568。 113 1142.本示例为Stage模型,支持API10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0 Release) 115 1163.本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。 117 118### 下载 119 120如需单独下载本工程,执行如下命令: 121 122``` 123git init 124git config core.sparsecheckout true 125echo code/BasicFeature/DFX/AppRecovery/ > .git/info/sparse-checkout 126git remote add origin https://gitee.com/openharmony/applications_app_samples.git 127git pull origin master 128``` 129