diff --git a/zh-cn/application-dev/ability/stage-ability-continuation.md b/zh-cn/application-dev/ability/stage-ability-continuation.md index 45909d126ca25d83298a39058a41c5d77e333cbc..8e3bae38fa8cb7fc7cb3a664dc61308c56af9401 100755 --- a/zh-cn/application-dev/ability/stage-ability-continuation.md +++ b/zh-cn/application-dev/ability/stage-ability-continuation.md @@ -12,7 +12,7 @@ |接口名 | 描述| |:------ | :------| -| onContinue(wantParams : {[key: string]: any}): OnContinueResult | 迁移**发起端**在该回调中保存迁移所需要的数据,同时返回是否同意迁移:0表示同意,拒绝返回相应错误码。 | +| onContinue(wantParam : {[key: string]: any}): OnContinueResult | 迁移**发起端**在该回调中保存迁移所需要的数据,同时返回是否同意迁移:0表示同意,拒绝返回相应错误码。 | | onCreate(want: Want,param:LaunchParam): void | 迁移**目标端**在该回调中完成数据恢复,并触发页面恢复。 | | **enum** OnContinueResult | onContinue的返回值类型:AGREE表示同意;REJECT表示拒绝;MISMATCH表示版本不匹配 | @@ -36,7 +36,7 @@ "continuable": true ``` - + * 配置应用启动类型 @@ -45,22 +45,22 @@ ```javascript "launchType": "standard" ``` - - + + * 申请分布式权限 - + 支持跨端迁移的应用需要在module.json5申请分布式权限 DISTRIBUTED_DATASYNC。 - + ```javascript "requestPermissions": [ { "name": "ohos.permission.DISTRIBUTED_DATASYNC" }, ``` - + 这个权限需要在应用首次启动的时候弹窗让用户授予,可以通过在ability的onWindowStageCreate中添加如下代码实现: - + ```javascript requestPermissions = async () => { let permissions: Array = [ @@ -97,20 +97,20 @@ } } ``` - - + + 2. 实现onContinue接口 onContinue接口在**发起端**被调用,主要用于在迁移发起时,通知开发者保存控件状态变量和内存中数据,准备迁移。当应用准备完成后,需要返回OnContinueResult.AGREE(0)表示同意迁移,否则返回相应的错误码拒绝迁移。如果不实现该接口,系统将默认为拒绝迁移。 导入模块 - + ```javascript import Ability from '@ohos.application.Ability'; import AbilityConstant from '@ohos.application.AbilityConstant'; ``` - + - 要实现迁移,此接口必须实现并返回AGREE,否则默认为拒绝迁移。 @@ -126,20 +126,20 @@ } ``` - + 3. 在onCreate接口中实现迁移逻辑 onCreate接口在迁移**目标端**被调用,在目标端ability被拉起时,通知开发者同步已保存的内存数据和控件状态,完成后触发页面的恢复。如果不实现该接口中迁移相关逻辑,ability将会作为普通的启动方式拉起,无法恢复页面。 - 远端设备上,在onCreate中根据launchReason判断该次启动是否为迁移LaunchReason.CONTINUATION - - + + - 完成数据恢复后,开发者需要调用**restoreWindowStage**来触发页面恢复。 - - + + * 示例 - + ```javascript onCreate(want, launchParam) { Logger.info(`MainAbility onCreate ${AbilityConstant.LaunchReason.CONTINUATION}`) @@ -148,14 +148,14 @@ let input = want.parameters.input // get user data from want params AppStorage.SetOrCreate('ContinueInput', input) Logger.info(`onCreate for continuation sessionId: ${this.sessionId}`) - + this.contentStorage = new ContentStorage(); this.context.restoreWindowStage(this.contentStorage); } } ``` - - + + ### 迁移数据 @@ -165,18 +165,18 @@ 迁移场景中,分布式对象(distributedDataObject)主要用于将本机内存数据同步到目标设备。 - - 发起端在onContinue中,将待迁移的数据存入分布式对象中,然后设置好session id,并通过wantParams将session id传到远端设备。 + - 发起端在onContinue中,将待迁移的数据存入分布式对象中,然后设置好session id,并通过wantParam将session id传到远端设备。 ```javascript import Ability from '@ohos.application.Ability'; import distributedObject from '@ohos.data.distributedDataObject'; - + var g_object = distributedObject.createDistributedObject({name:undefined}); - + export default class MainAbility extends Ability { contentStorage : ContenStorage sessionId : string; - + onContinue(wantParam : {[key: string]: any}) { Logger.info("onContinue using distributedObject") this.sessionId = distributedObject.genSessionId(); @@ -187,44 +187,44 @@ wantParam["session"] = this.sessionId; return AbilityConstant.OnContinueResult.AGREE } - + ``` - 目标设备在onCreate中,取出发起端传过来的session id,建立分布式对象并关联该session id,这样就能实现分布式对象的同步。需要注意的是,在调用restoreWindowStage之前,迁移需要的分布式对象必须全部关联完,保证能够获取到正确的数据。 - + ```javascript import Ability from '@ohos.application.Ability'; import distributedObject from '@ohos.data.distributedDataObject'; - + var g_object = distributedObject.createDistributedObject({name:undefined}); - + export default class MainAbility extends Ability { contentStorage : ContentStorage sessionId : string; - + statusCallback(sessionId, networkid, status) { Logger.info(`continuation object status change, sessionId: ${sessionId}, status: ${status}, g_object.name: ${g_object.name}`) } - + onCreate(want, launchParam) { Logger.info(`MainAbility onCreate ${AbilityConstant.LaunchReason.CONTINUATION}`) if (launchParam.launchReason == AbilityConstant.LaunchReason.CONTINUATION) { // get distributed data object session id from want params this.sessionId = want.parameters.session Logger.info(`onCreate for continuation sessionId: ${this.sessionId}`) - + g_object.on("status", this.statusCallback); // set session id, so it will sync data from remote device g_object.setSessionId(this.sessionId); - + this.contentStorage = new ContentStorage(); this.context.restoreWindowStage(this.contentStorage); } } } ``` - - + + 以上完整的示例见sample diff --git a/zh-cn/application-dev/ability/stage-brief.md b/zh-cn/application-dev/ability/stage-brief.md index 9da6f1c43224ceb365908fb31fadf59868b2eb0f..67ad31720968b19ed778462f99536dd9581aaec1 100644 --- a/zh-cn/application-dev/ability/stage-brief.md +++ b/zh-cn/application-dev/ability/stage-brief.md @@ -20,7 +20,7 @@ - **支持多设备和多窗口形态的特点** - ​ 为了支持多种设备形态和更易于实现多种不同的窗口形态,需要组件管理服务和窗口管理服务在架构层面上是解耦的,从而方便裁剪,更有利于定制不同的窗口形态。Stage模型通过重新定义了Ability生命周期定义和设计组件管理服务和窗口管理服务的单项依赖解决这一问题。 + ​ 为了支持多种设备形态和更易于实现多种不同的窗口形态,需要组件管理服务和窗口管理服务在架构层面上是解耦的,从而方便裁剪,更有利于定制不同的窗口形态。Stage模型通过重新定义了Ability生命周期定义和设计组件管理服务和窗口管理服务的单向依赖解决这一问题。 ### 基本概念 diff --git a/zh-cn/application-dev/ability/stage-call.md b/zh-cn/application-dev/ability/stage-call.md index 72821e4911541776745621295f5785e83c001384..ee4112103fb743f2fbe2bd6daaa2e4088b909334 100644 --- a/zh-cn/application-dev/ability/stage-call.md +++ b/zh-cn/application-dev/ability/stage-call.md @@ -15,7 +15,7 @@ Caller及Callee功能如下:具体的API详见[接口文档](../reference/apis |接口名|描述| |:------|:------| |Promise startAbilityByCall(want: Want)|获取指定通用组件的Caller通信接口,拉起指定通用组件并将其切换到后台。| -|void on(method: string, callback: CaleeCallBack)|Callee.on,通用组件Callee注册method对应的callback方法。| +|void on(method: string, callback: CalleeCallBack)|Callee.on,通用组件Callee注册method对应的callback方法。| |void off(method: string)|Callee.off,通用组件Callee去注册method的callback方法。| |Promise call(method: string, data: rpc.Sequenceable)|Caller.call,向通用组件Callee发送约定序列化数据。| |Promise callWithResult(method: string, data: rpc.Sequenceable)|Caller.callWithResult,向通用组件Callee发送约定序列化数据, 并将返回的约定序列化数据带回。| @@ -196,7 +196,7 @@ context.requestPermissionsFromUser(permissions).then((data) => { ``` 3. 发送约定序列化数据 -向被调用端发送Sequenceable数据有两种方式,一种是不带返回值,一种是获取被调用端返回的数据,method以及序列化数据需要与被调用端协商一致。如下示例调用Call接口,向Calee被调用端发送数据。具体示例代码如下: +向被调用端发送Sequenceable数据有两种方式,一种是不带返回值,一种是获取被调用端返回的数据,method以及序列化数据需要与被调用端协商一致。如下示例调用Call接口,向Callee被调用端发送数据。具体示例代码如下: ```ts const MSG_SEND_METHOD: string = 'CallSendMsg' async onButtonCall() { @@ -209,7 +209,7 @@ async onButtonCall() { } ``` -如下示例调用CallWithResult接口,向Calee被调用端发送待处理的数据`originMsg`,并将'CallSendMsg'方法处理完毕的数据赋值给`backMsg`。具体示例代码如下: +如下示例调用CallWithResult接口,向Callee被调用端发送待处理的数据`originMsg`,并将'CallSendMsg'方法处理完毕的数据赋值给`backMsg`。具体示例代码如下: ```ts const MSG_SEND_METHOD: string = 'CallSendMsg' originMsg: string = '' @@ -247,4 +247,4 @@ try { [eTSStageCallAbility](https://gitee.com/openharmony/app_samples/tree/master/ability/eTSStageCallAbility) -本示例eTSStageCallAbility中,在Application目录的AbilityStage.ts中实现AbilityStage的接口,在MainAbility目录实现Ability的接口并设置"pages/index"为Ability的页面,在CaleeAbility目录实现Ability的接口、Callee被调用端,设置"pages/second"为Ability的页面。MainAbility作为调用端,CalleeAbility作为被调用端。MainAbility拉起CalleeAbility,获取Caller通信接口后,支持用户输入字符串,做序列化处理后传递给CaleeAbility处理,CaleeAbility根据收到的数据做页面刷新并返回结果给MainAbility。 +本示例eTSStageCallAbility中,在Application目录的AbilityStage.ts中实现AbilityStage的接口,在MainAbility目录实现Ability的接口并设置"pages/index"为Ability的页面,在CalleeAbility目录实现Ability的接口、Callee被调用端,设置"pages/second"为Ability的页面。MainAbility作为调用端,CalleeAbility作为被调用端。MainAbility拉起CalleeAbility,获取Caller通信接口后,支持用户输入字符串,做序列化处理后传递给CalleeAbility处理,CalleeAbility根据收到的数据做页面刷新并返回结果给MainAbility。