From 4ec527b09951b71476ae746834d221b223c9f70e Mon Sep 17 00:00:00 2001 From: wuliubao Date: Tue, 22 Mar 2022 15:45:04 +0800 Subject: [PATCH] =?UTF-8?q?IssueNo:#I4Z09D=20Description:=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0serviceExtensionAbility=E6=96=87=E6=A1=A3=20Sig:=20SIG?= =?UTF-8?q?=5FApplicationFramework=20Feature=20or=20Bugfix:=20Feature=20Bi?= =?UTF-8?q?nary=20Source:=20No?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuliubao --- .../ability/stage-serviceextension.md | 98 ++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/zh-cn/application-dev/ability/stage-serviceextension.md b/zh-cn/application-dev/ability/stage-serviceextension.md index 76dcddc720..84bdde71bb 100644 --- a/zh-cn/application-dev/ability/stage-serviceextension.md +++ b/zh-cn/application-dev/ability/stage-serviceextension.md @@ -1 +1,97 @@ -# ServiceExtensionAbility开发指导 \ No newline at end of file +# ServiceExtensionAbility开发指导 + +## 基本概念 +ExtensionAbility,是Stage模型中新增的扩展组件的基类,一般用于处理无界面的任务,生命周期较简单,没有前后台生命周期。ServiceExtensionAbility是ExtensionAbility的扩展类。 + +开发者可以自定义类继承ServiceExtensionAbility,通过重写基类中相关生命周期方法,来做初始化、连接中、断开连接时相关业务逻辑操作。 +ServiceExtensionAbility中相关生命周期说明如下: + + - onCreate() + + 首次调用startAbility、connectAbility时触发,开发者可以进行初始化操作。 + + - onRequest() + + 每次调用startAbility都会触发,首次调用时startId为1,重复调用startAbility递增。 + + - onConnect() + + 调用connectAbility触发,重复调用不会再次触发,除非调用disconnectAbility解除绑定后再调用;onConnect返回一个进程通信类RemoteObject。 + + - onDisconnect() + + 调用disconnectAbility触发,Extension如果是用connectAbility拉起的,并且已经没有其他应用绑定这个Extension,则会触发onDestroy生命周期销毁组件。 + + - onDestroy() + + 调用停止当前ability接口terminateSelf会触发。 + + +## 约束与限制 + +- ServiceExtensionAbility使用和拉起都必须要有系统权限,鸿蒙系统当前不支持三方应用创建、使用和拉起后台应用功能。 + + +## 启动ServiceExtensionAbility + +1.创建ServiceExtensionAbility + +开发者在创建TS文件中自定义类继承ServiceExtensionAbility,重写基类回调函数,示例如下: + + ```js + import rpc from '@ohos.rpc' + class StubTest extends rpc.RemoteObject { + constructor(des) { + super(des); + } + onRemoteRequest(code, data, reply, option) { + } + } + + class ServiceExt extends ServiceExtensionAbility { + onCreate(want) { + console.log('onCreate, want:' + want.abilityName); + } + onRequest(want, startId) { + console.log('onRequest, want:' + want.abilityName); + } + onConnect(want) { + console.log('onConnect , want:' + want.abilityName); + return new StubTest("test"); + } + onDisconnect(want) { + console.log('onDisconnect, want:' + want.abilityName); + } + onDestroy() { + console.log('onDestroy'); + } + } + ``` + + +2.注册ServiceExtensionAbility + +需要在应用配置文件module.json中进行注册,注册类型type需要设置为service。 + +**config.json配置样例** + +```json +"extensionAbilities":[{ + "name": "ServiceExtAbility", + "icon": "$media:icon", + "description": "service", + "type": "service", + "visible": true, + "srcEntrance": "./ets/ServiceExtAbility/ServiceExtAbility.ts" +}] +``` + +## 开发实例 + +针对ServiceExtensionAbility开发,有以下示例工程可供参考: + +- [ServiceExtensionAbility]() + +本示例ServiceExtensionAbility中: + +在ServiceExtensionAbility目录中的ServiceExtAbility.ts文件创建一个ServiceExtensionAbility实例。 -- GitLab