• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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|![home](screenshots/devices/zh/entry_page.jpeg)|![fault](screenshots/devices/zh/fault_trigger_page.jpeg)|
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### 依赖
108109
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