• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.app.ability.ServiceExtensionAbility (ServiceExtensionAbility)(系统接口)
2<!--Kit: Ability Kit-->
3<!--Subsystem: Ability-->
4<!--Owner: @yewei0794-->
5<!--Designer: @jsjzju-->
6<!--Tester: @lixueqing513-->
7<!--Adviser: @huipeizi-->
8
9ServiceExtensionAbility模块提供后台服务相关扩展能力,提供后台服务创建、销毁、连接、断开等生命周期回调。
10
11> **说明:**
12>
13> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14>
15> 本模块接口仅可在Stage模型下使用。
16>
17> 本模块为系统接口。
18
19## 导入模块
20
21```ts
22import { ServiceExtensionAbility } from '@kit.AbilityKit';
23```
24
25## 权限
26
2728
29## ServiceExtensionAbility
30
31### 属性
32
33**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
34
35**系统接口**:此接口为系统接口。
36
37| 名称 | 类型 | 只读 | 可选 | 说明 |
38| -------- | -------- | -------- | -------- | -------- |
39| context | [ServiceExtensionContext](js-apis-inner-application-serviceExtensionContext-sys.md)  | 否 | 否 | ServiceExtension的上下文环境,继承自ExtensionContext。 |
40
41
42### onCreate
43
44onCreate(want: Want): void;
45
46Extension生命周期回调,在创建时回调,执行初始化业务逻辑操作。
47
48**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
49
50**系统接口**:此接口为系统接口。
51
52**参数:**
53
54| 参数名 | 类型 | 必填 | 说明 |
55| -------- | -------- | -------- | -------- |
56| want |  [Want](js-apis-app-ability-want.md) | 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 |
57
58**示例:**
59
60```ts
61import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
62
63class ServiceExt extends ServiceExtensionAbility {
64  onCreate(want: Want) {
65    console.info(`onCreate, want: ${want.abilityName}`);
66  }
67}
68```
69
70
71### onDestroy
72
73onDestroy(): void;
74
75Extension生命周期回调,在销毁时回调,执行资源清理等操作。
76
77**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
78
79**系统接口**:此接口为系统接口。
80
81**示例:**
82
83```ts
84import { ServiceExtensionAbility } from '@kit.AbilityKit';
85
86class ServiceExt extends ServiceExtensionAbility {
87  onDestroy() {
88    console.info('onDestroy');
89  }
90}
91```
92
93
94### onRequest
95
96onRequest(want: Want, startId: number): void;
97
98Extension生命周期回调,如果是startAbility或者startServiceExtensionAbility拉起的服务,会在onCreate之后回调。每次拉起服务都会回调,startId会递增。
99
100**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
101
102**系统接口**:此接口为系统接口。
103
104**参数:**
105
106| 参数名 | 类型 | 必填 | 说明 |
107| -------- | -------- | -------- | -------- |
108| want |  [Want](js-apis-app-ability-want.md) | 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 |
109| startId | number | 是 | 返回拉起次数。首次拉起初始值返回1,多次之后自动递增。 |
110
111**示例:**
112
113```ts
114import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
115
116class ServiceExt extends ServiceExtensionAbility {
117  onRequest(want: Want, startId: number) {
118    console.info('onRequest, want: ${want.abilityName}');
119  }
120}
121```
122
123
124### onConnect
125
126onConnect(want: Want): rpc.RemoteObject | Promise<rpc.RemoteObject>;
127
128Extension生命周期回调,如果是connectAbility拉起的服务,会在onCreate之后回调。返回一个RemoteObject对象,用于客户端和服务端进行通信。
129
130**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
131
132**系统接口**:此接口为系统接口。
133
134**参数:**
135
136| 参数名 | 类型 | 必填 | 说明 |
137| -------- | -------- | -------- | -------- |
138| want |  [Want](js-apis-app-ability-want.md)| 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 |
139
140**返回值:**
141
142| 类型 | 说明 |
143| -------- | -------- |
144| [rpc.RemoteObject](../apis-ipc-kit/js-apis-rpc.md#remoteobject) \| Promise\<[rpc.RemoteObject](../apis-ipc-kit/js-apis-rpc.md#remoteobject)> | 返回RemoteObject对象或带有RemoteObject对象的Promise对象,用于客户端和服务端进行通信。 |
145
146**示例:**
147
148```ts
149import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
150import { rpc } from '@kit.IPCKit';
151
152class StubTest extends rpc.RemoteObject{
153  constructor(des: string) {
154    super(des);
155  }
156  onConnect(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence, option: rpc.MessageOption) {
157  }
158}
159class ServiceExt extends ServiceExtensionAbility {
160  onConnect(want: Want) {
161    console.info('onConnect , want: ${want.abilityName}');
162    return new StubTest('test');
163  }
164}
165```
166
167如果生成返回值RemoteObject依赖一个异步接口,可以使用异步生命周期:
168
169```ts
170import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
171import { rpc } from '@kit.IPCKit';
172
173class StubTest extends rpc.RemoteObject{
174  constructor(des: string) {
175    super(des);
176  }
177  onConnect(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence, option: rpc.MessageOption) {
178  }
179}
180async function getDescriptor() {
181  // 调用异步函数...
182  return "asyncTest"
183}
184class ServiceExt extends ServiceExtensionAbility {
185  async onConnect(want: Want) {
186    console.info(`onConnect , want: ${want.abilityName}`);
187    let descriptor = await getDescriptor();
188    return new StubTest(descriptor);
189  }
190}
191```
192
193### onDisconnect
194
195onDisconnect(want: Want): void | Promise\<void>;
196
197Extension的生命周期回调,客户端执行断开连接服务时回调。
198
199**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
200
201**系统接口**:此接口为系统接口。
202
203**参数:**
204
205| 参数名 | 类型 | 必填 | 说明 |
206| -------- | -------- | -------- | -------- |
207| want |[Want](js-apis-app-ability-want.md)| 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 |
208
209**返回值:**
210
211| 类型 | 说明 |
212| -------- | -------- |
213| Promise\<void> | Promise对象。无返回结果的Promise对象。 |
214
215**示例:**
216
217```ts
218import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
219
220class ServiceExt extends ServiceExtensionAbility {
221  onDisconnect(want: Want) {
222    console.info('onDisconnect, want: ${want.abilityName}');
223  }
224}
225```
226
227在执行完onDisconnect生命周期回调后,应用可能会退出,从而可能导致onDisconnect中的异步函数未能正确执行,比如异步写入数据库。可以使用异步生命周期,以确保异步onDisconnect完成后再继续后续的生命周期。
228
229```ts
230import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
231
232class ServiceExt extends ServiceExtensionAbility {
233  async onDisconnect(want: Want) {
234    console.info('onDisconnect, want: ${want.abilityName}');
235    // 调用异步函数...
236  }
237}
238```
239
240### onReconnect
241
242onReconnect(want: Want): void;
243
244Extension的生命周期回调,当所有以前的客户端都断开连接之后,新客户端尝试连接到服务时调用。预留能力,当前暂未支持。
245
246**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
247
248**系统接口**:此接口为系统接口。
249
250**参数:**
251
252| 参数名 | 类型 | 必填 | 说明 |
253| -------- | -------- | -------- | -------- |
254| want |[Want](js-apis-app-ability-want.md)| 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 |
255
256**示例:**
257
258```ts
259import { ServiceExtensionAbility, Want } from '@kit.AbilityKit';
260
261class ServiceExt extends ServiceExtensionAbility {
262  onReconnect(want: Want) {
263    console.info('onReconnect, want: ${want.abilityName}');
264  }
265}
266```
267
268### onConfigurationUpdate
269
270onConfigurationUpdate(newConfig: Configuration): void;
271
272当Extension更新配置信息时调用。
273
274**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
275
276**系统接口**:此接口为系统接口。
277
278**参数:**
279
280| 参数名 | 类型 | 必填 | 说明 |
281| -------- | -------- | -------- | -------- |
282| newConfig | [Configuration](js-apis-app-ability-configuration.md) | 是 | 表示需要更新的配置信息。 |
283
284**示例:**
285
286```ts
287import { ServiceExtensionAbility, Configuration } from '@kit.AbilityKit';
288
289class ServiceExt extends ServiceExtensionAbility {
290  onConfigurationUpdate(newConfig: Configuration) {
291    console.info(`onConfigurationUpdate, config: ${JSON.stringify(newConfig)}`);
292  }
293}
294```
295
296### onDump
297
298onDump(params: Array\<string>): Array\<string>;
299
300转储客户端信息时调用。
301
302**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
303
304**系统接口**:此接口为系统接口。
305
306**参数:**
307
308| 参数名 | 类型 | 必填 | 说明 |
309| -------- | -------- | -------- | -------- |
310| params | Array\<string> | 是 | 表示命令形式的参数。|
311
312**返回值:**
313
314| 类型 | 说明 |
315| -------- | -------- |
316| Array\<string> | 表示转存客户端信息数组。 |
317
318**示例:**
319
320```ts
321import { ServiceExtensionAbility } from '@kit.AbilityKit';
322
323class ServiceExt extends ServiceExtensionAbility {
324  onDump(params: Array<string>) {
325    console.info(`dump, params: ${JSON.stringify(params)}`);
326    return ['params'];
327  }
328}
329```
330