提交 8d7039c6 编写于 作者: W wangdongdong

Signed-off-by: wangdongdong <wangdd_zju@126.com>

Change-Id: I3821b8c8768f29f4808cd07781c43d3995fc6616
Signed-off-by: Nwangdongdong <wangdd_zju@126.com>
Change-Id: I70a598db590757a7c858fc379eedeb06c1455552
Signed-off-by: Nwangdongdong <wangdd_zju@126.com>
上级 e89ecddf
...@@ -12,9 +12,8 @@ ...@@ -12,9 +12,8 @@
|接口名 | 描述| |接口名 | 描述|
|:------ | :------| |:------ | :------|
| onContinue(wantParam : {[key: string]: any}): OnContinueResult | 迁移**发起端**在该回调中保存迁移所需要的数据,同时返回是否同意迁移:0表示同意,拒绝返回相应错误码。 | | onContinue(wantParam : {[key: string]: any}): OnContinueResult | 迁移**发起端**在该回调中保存迁移所需要的数据,同时返回是否同意迁移:AGREE表示同意,REJECT表示拒绝;MISMATCH表示版本不匹配。 |
| onCreate(want: Want,param:LaunchParam): void | 迁移**目标端**在该回调中完成数据恢复,并触发页面恢复。 | | onCreate(want: Want, param : LaunchParam): void | 迁移**目标端**在该回调中完成数据恢复,并触发页面恢复。 |
| **enum** OnContinueResult | onContinue的返回值类型:AGREE表示同意;REJECT表示拒绝;MISMATCH表示版本不匹配 |
...@@ -22,6 +21,8 @@ ...@@ -22,6 +21,8 @@
![continuation_dev](figures/continuation-info.png) ![continuation_dev](figures/continuation-info.png)
迁移实际上是Ability携带数据的跨端启动。触发迁移动作时,会在A设备上通过系统回调应用的onContinue()方法,开发者需要在此方法中实现当前数据的保存。然后系统发起在B设备上的跨端启动,并将数据一同传输到B设备。B设备系统回调onCreate()方法,开发者需要在此方法中实现传输过来的数据的恢复。
## 开发步骤 ## 开发步骤
### 迁移应用 ### 迁移应用
...@@ -38,7 +39,8 @@ ...@@ -38,7 +39,8 @@
* 配置应用启动类型
- 配置应用启动类型
迁移当前只支持多实例应用,需要在在module.json5中配置launchType字段为standard。 迁移当前只支持多实例应用,需要在在module.json5中配置launchType字段为standard。
...@@ -48,7 +50,8 @@ ...@@ -48,7 +50,8 @@
* 申请分布式权限
- 申请分布式权限
支持跨端迁移的应用需要在module.json5申请分布式权限 DISTRIBUTED_DATASYNC。 支持跨端迁移的应用需要在module.json5申请分布式权限 DISTRIBUTED_DATASYNC。
...@@ -59,6 +62,8 @@ ...@@ -59,6 +62,8 @@
}, },
``` ```
这个权限需要在应用首次启动的时候弹窗让用户授予,可以通过在ability的onWindowStageCreate中添加如下代码实现: 这个权限需要在应用首次启动的时候弹窗让用户授予,可以通过在ability的onWindowStageCreate中添加如下代码实现:
```javascript ```javascript
...@@ -100,9 +105,11 @@ ...@@ -100,9 +105,11 @@
2. 实现onContinue接口 2. 实现onContinue接口
onContinue接口在**发起端**被调用,主要用于在迁移发起时,通知开发者保存控件状态变量和内存中数据,准备迁移。当应用准备完成后,需要返回OnContinueResult.AGREE(0)表示同意迁移,否则返回相应的错误码拒绝迁移。如果不实现该接口,系统将默认为拒绝迁移。 onContinue接口在发起端被调用,主要用于在迁移发起时,通知开发者保存控件状态变量和内存中数据,准备迁移。当应用准备完成后,需要返回OnContinueResult.AGREE(0)表示同意迁移,否则返回相应的错误码拒绝迁移。如果不实现该接口,系统将默认为拒绝迁移。
导入模块 导入模块
...@@ -111,10 +118,9 @@ ...@@ -111,10 +118,9 @@
import AbilityConstant from '@ohos.application.AbilityConstant'; import AbilityConstant from '@ohos.application.AbilityConstant';
``` ```
- 要实现迁移,此接口必须实现并返回AGREE,否则默认为拒绝迁移。 要实现迁移,此接口必须实现并返回AGREE,否则默认为拒绝迁移。
示例
- 示例
```javascript ```javascript
onContinue(wantParam : {[key: string]: any}) { onContinue(wantParam : {[key: string]: any}) {
...@@ -130,15 +136,13 @@ ...@@ -130,15 +136,13 @@
3. 在onCreate接口中实现迁移逻辑 3. 在onCreate接口中实现迁移逻辑
onCreate接口在迁移**目标端**被调用,在目标端ability被拉起时,通知开发者同步已保存的内存数据和控件状态,完成后触发页面的恢复。如果不实现该接口中迁移相关逻辑,ability将会作为普通的启动方式拉起,无法恢复页面。 onCreate接口在迁移目标端被调用,在目标端ability被拉起时,通知开发者同步已保存的内存数据和控件状态,完成后触发页面的恢复。如果不实现该接口中迁移相关逻辑,ability将会作为普通的启动方式拉起,无法恢复页面。
- 远端设备上,在onCreate中根据launchReason判断该次启动是否为迁移LaunchReason.CONTINUATION
远端设备上,在onCreate中根据launchReason判断该次启动是否为迁移LaunchReason.CONTINUATION
- 完成数据恢复后,开发者需要调用**restoreWindowStage**来触发页面恢复。 完成数据恢复后,开发者需要调用restoreWindowStage来触发页面恢复。
示例
* 示例
```javascript ```javascript
onCreate(want, launchParam) { onCreate(want, launchParam) {
...@@ -159,13 +163,13 @@ ...@@ -159,13 +163,13 @@
### 迁移数据 ### 迁移数据
1. 使用分布式对象 使用分布式对象
分布式数据对象提供了与本地变量类似的操作,实现两个设备的数据同步,当设备1的应用A的分布式数据对象增、删、改数据后,设备2的应用A也可以获取到对应的数据变化,同时还能监听数据变更以及对端数据对象的上下线。用法详见[分布式对象指导文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/database/database-distributedobject-guidelines.md) 分布式数据对象提供了与本地变量类似的操作,实现两个设备的数据同步,当设备1的应用A的分布式数据对象增、删、改数据后,设备2的应用A也可以获取到对应的数据变化,同时还能监听数据变更以及对端数据对象的上下线。用法详见[分布式对象指导文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/database/database-distributedobject-guidelines.md)
迁移场景中,分布式对象(distributedDataObject)主要用于将本机内存数据同步到目标设备。 迁移场景中,分布式对象(distributedDataObject)主要用于将本机内存数据同步到目标设备。
- 发起端在onContinue中,将待迁移的数据存入分布式对象中,然后设置好session id,并通过wantParam将session id传到远端设备。 - 发起端在onContinue中,将待迁移的数据存入分布式对象中,然后设置好session id,并通过wantParam将session id传到远端设备。
```javascript ```javascript
import Ability from '@ohos.application.Ability'; import Ability from '@ohos.application.Ability';
...@@ -187,10 +191,11 @@ ...@@ -187,10 +191,11 @@
wantParam["session"] = this.sessionId; wantParam["session"] = this.sessionId;
return AbilityConstant.OnContinueResult.AGREE return AbilityConstant.OnContinueResult.AGREE
} }
``` ```
- 目标设备在onCreate中,取出发起端传过来的session id,建立分布式对象并关联该session id,这样就能实现分布式对象的同步。需要注意的是,在调用restoreWindowStage之前,迁移需要的分布式对象必须全部关联完,保证能够获取到正确的数据。
- 目标设备在onCreate中,取出发起端传过来的session id,建立分布式对象并关联该session id,这样就能实现分布式对象的同步。需要注意的是,在调用restoreWindowStage之前,迁移需要的分布式对象必须全部关联完,保证能够获取到正确的数据。
```javascript ```javascript
import Ability from '@ohos.application.Ability'; import Ability from '@ohos.application.Ability';
...@@ -225,8 +230,3 @@ ...@@ -225,8 +230,3 @@
``` ```
以上完整的示例见sample
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册