• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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