1# ServiceExtensionAbility开发指导 2 3## 场景介绍 4ExtensionAbility,是Stage模型中新增的扩展组件的基类,一般用于处理无界面的任务,生命周期较简单,没有前后台生命周期。ServiceExtensionAbility是ExtensionAbility的扩展类。 5 6开发者可以自定义类继承ServiceExtensionAbility,通过重写基类中相关生命周期方法,来做初始化、连接中、断开连接时相关业务逻辑操作。 7 8## 接口说明 9 10**表1** ServiceExtensionAbility中相关生命周期API功能介绍 11|接口名|描述| 12|:------|:------| 13|onCreate(want: Want): void|首次调用startAbility、connectAbility时触发,开发者可以进行初始化操作。| 14|onRequest(want: Want, startId: number): void|每次调用startAbility都会触发,首次调用时startId为1,重复调用startAbility递增。| 15|onConnect(want: Want): rpc.RemoteObject|调用connectAbility触发,重复调用不会再次触发,除非调用disconnectAbility解除绑定后再调用;onConnect返回一个进程通信类RemoteObject。| 16|onDisconnect(want: Want): void|调用disconnectAbility触发,Extension如果是用connectAbility拉起的,并且已经没有其他应用绑定这个Extension,则会触发onDestroy生命周期销毁组件。| 17|onDestroy(): void|调用停止当前ability接口terminateSelf会触发。| 18 19 20## 约束与限制 21 22- OpenHarmony当前不支持三方应用创建ServiceExtensionAbility。 23 24 25## 开发步骤 26 271.创建ServiceExtensionAbility 28 29开发者在创建TS文件中自定义类继承ServiceExtensionAbility,重写基类回调函数,接口生成的默认相对路径:entry\src\main\ets\ServiceExtAbility\ServiceExtAbility.ts,示例如下: 30 31 ```js 32 import rpc from '@ohos.rpc' 33 class StubTest extends rpc.RemoteObject { 34 constructor(des) { 35 super(des); 36 } 37 onRemoteRequest(code, data, reply, option) { 38 } 39 } 40 41 class ServiceExt extends ServiceExtensionAbility { 42 onCreate(want) { 43 console.log('onCreate, want:' + want.abilityName); 44 } 45 onRequest(want, startId) { 46 console.log('onRequest, want:' + want.abilityName); 47 } 48 onConnect(want) { 49 console.log('onConnect , want:' + want.abilityName); 50 return new StubTest("test"); 51 } 52 onDisconnect(want) { 53 console.log('onDisconnect, want:' + want.abilityName); 54 } 55 onDestroy() { 56 console.log('onDestroy'); 57 } 58 } 59 ``` 60 61 622.注册ServiceExtensionAbility 63 64需要在应用配置文件module.json5中进行注册,注册类型type需要设置为service。 65 66**module.json5配置样例** 67 68```json 69"extensionAbilities":[{ 70 "name": "ServiceExtAbility", 71 "icon": "$media:icon", 72 "description": "service", 73 "type": "service", 74 "visible": true, 75 "srcEntrance": "./ets/ServiceExtAbility/ServiceExtAbility.ts" 76}] 77``` 78