1# @ohos.app.ability.ServiceExtensionAbility (ServiceExtensionAbility) 2 3The **ServiceExtensionAbility** module provides lifecycle callbacks when a ServiceExtensionAbility (background service) is created, destroyed, connected, or disconnected. 4 5> **NOTE** 6> 7> The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version. 8> The APIs provided by this module are system APIs. 9> The APIs of this module can be used only in the stage model. 10 11## Modules to Import 12 13```ts 14import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 15``` 16 17## Required Permissions 18 19None. 20 21## Attributes 22 23**System capability**: SystemCapability.Ability.AbilityRuntime.Core 24 25**System API**: This is a system API and cannot be called by third-party applications. 26 27| Name| Type| Readable| Writable| Description| 28| -------- | -------- | -------- | -------- | -------- | 29| context | [ServiceExtensionContext](js-apis-inner-application-serviceExtensionContext.md) | Yes| No| ServiceExtensionContext, which is inherited from **ExtensionContext**.| 30 31 32## ServiceExtensionAbility.onCreate 33 34onCreate(want: Want): void; 35 36Called to initialize the service logic when a ServiceExtensionAbility is being created. 37 38**System capability**: SystemCapability.Ability.AbilityRuntime.Core 39 40**System API**: This is a system API and cannot be called by third-party applications. 41 42**Parameters** 43 44| Name| Type| Mandatory| Description| 45| -------- | -------- | -------- | -------- | 46| want | [Want](js-apis-app-ability-want.md) | Yes| Want information related to this ServiceExtensionAbility, including the ability name and bundle name.| 47 48**Example** 49 50 ```ts 51 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 52 import Want from '@ohos.app.ability.Want'; 53 54 class ServiceExt extends ServiceExtension { 55 onCreate(want: Want) { 56 console.log('onCreate, want: ${want.abilityName}'); 57 } 58 } 59 ``` 60 61 62## ServiceExtensionAbility.onDestroy 63 64onDestroy(): void; 65 66Called to clear resources when this ServiceExtensionAbility is being destroyed. 67 68**System capability**: SystemCapability.Ability.AbilityRuntime.Core 69 70**System API**: This is a system API and cannot be called by third-party applications. 71 72**Example** 73 74 ```ts 75 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 76 77 class ServiceExt extends ServiceExtension { 78 onDestroy() { 79 console.log('onDestroy'); 80 } 81 } 82 ``` 83 84 85## ServiceExtensionAbility.onRequest 86 87onRequest(want: Want, startId: number): void; 88 89Called following **onCreate()** when a ServiceExtensionAbility is started by calling **startAbility()** or **startServiceExtensionAbility()**. The value of **startId** is incremented for each ServiceExtensionAbility that is started. 90 91**System capability**: SystemCapability.Ability.AbilityRuntime.Core 92 93**System API**: This is a system API and cannot be called by third-party applications. 94 95**Parameters** 96 97| Name| Type| Mandatory| Description| 98| -------- | -------- | -------- | -------- | 99| want | [Want](js-apis-app-ability-want.md) | Yes| Want information related to this ServiceExtensionAbility, including the ability name and bundle name.| 100| startId | number | Yes| Number of ServiceExtensionAbility start times. The initial value is **1**, and the value is automatically incremented for each ServiceExtensionAbility started.| 101 102**Example** 103 104 ```ts 105 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 106 import Want from '@ohos.app.ability.Want'; 107 108 class ServiceExt extends ServiceExtension { 109 onRequest(want: Want, startId: number) { 110 console.log('onRequest, want: ${want.abilityName}'); 111 } 112 } 113 ``` 114 115 116## ServiceExtensionAbility.onConnect 117 118onConnect(want: Want): rpc.RemoteObject | Promise<rpc.RemoteObject>; 119 120Called following **onCreate()** when a ServiceExtensionAbility is started by calling **connectAbility()**. A **RemoteObject** object is returned for communication between the server and client. 121 122**System capability**: SystemCapability.Ability.AbilityRuntime.Core 123 124**System API**: This is a system API and cannot be called by third-party applications. 125 126**Parameters** 127 128| Name| Type| Mandatory| Description| 129| -------- | -------- | -------- | -------- | 130| want | [Want](js-apis-app-ability-want.md)| Yes| Want information related to this ServiceExtensionAbility, including the ability name and bundle name.| 131 132**Return value** 133 134| Type| Description| 135| -------- | -------- | 136| rpc.RemoteObject | A **RemoteObject** object used for communication between the server and client.| 137 138**Example** 139 140 ```ts 141 import rpc from '@ohos.rpc'; 142 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 143 import Want from '@ohos.app.ability.Want'; 144 145 class StubTest extends rpc.RemoteObject{ 146 constructor(des: string) { 147 super(des); 148 } 149 onConnect(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence, option: rpc.MessageOption) { 150 } 151 } 152 class ServiceExt extends ServiceExtension { 153 onConnect(want: Want) { 154 console.log('onConnect , want: ${want.abilityName}'); 155 return new StubTest('test'); 156 } 157 } 158 ``` 159 160If the returned **RemoteObject** object depends on an asynchronous API, you can use the asynchronous lifecycle. 161 162 ```ts 163import rpc from '@ohos.rpc'; 164import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 165import Want from '@ohos.app.ability.Want'; 166 167class StubTest extends rpc.RemoteObject{ 168 constructor(des: string) { 169 super(des); 170 } 171 onConnect(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence, option: rpc.MessageOption) { 172 } 173} 174async function getDescriptor() { 175 // Call the asynchronous function. 176 return "asyncTest" 177} 178class ServiceExt extends ServiceExtension { 179 async onConnect(want: Want) { 180 console.log(`onConnect , want: ${want.abilityName}`); 181 let descriptor = await getDescriptor(); 182 return new StubTest(descriptor); 183 } 184} 185 ``` 186 187## ServiceExtensionAbility.onDisconnect 188 189onDisconnect(want: Want): void | Promise\<void>; 190 191Called when a client is disconnected from this ServiceExtensionAbility. 192 193**System capability**: SystemCapability.Ability.AbilityRuntime.Core 194 195**System API**: This is a system API and cannot be called by third-party applications. 196 197**Parameters** 198 199| Name| Type| Mandatory| Description| 200| -------- | -------- | -------- | -------- | 201| want |[Want](js-apis-app-ability-want.md)| Yes| Want information related to this ServiceExtensionAbility, including the ability name and bundle name.| 202 203**Example** 204 205 ```ts 206 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 207 import Want from '@ohos.app.ability.Want'; 208 209 class ServiceExt extends ServiceExtension { 210 onDisconnect(want: Want) { 211 console.log('onDisconnect, want: ${want.abilityName}'); 212 } 213 } 214 ``` 215 216After the **onDisconnect()** lifecycle callback is executed, the application may exit. Consequently, the asynchronous function (for example, asynchronously writing data to the database) in **onDisconnect()** may fail to be executed. The asynchronous lifecycle can be used to ensure that the subsequent lifecycle continues after the asynchronous **onDisconnect()** is complete. 217 218 ```ts 219import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 220import Want from '@ohos.app.ability.Want'; 221 222class ServiceExt extends ServiceExtension { 223 async onDisconnect(want: Want) { 224 console.log('onDisconnect, want: ${want.abilityName}'); 225 // Call the asynchronous function. 226 } 227} 228 ``` 229 230## ServiceExtensionAbility.onReconnect 231 232onReconnect(want: Want): void; 233 234Called when a new client attempts to connect to this ServiceExtensionAbility after all previous clients are disconnected. This capability is reserved. 235 236**System capability**: SystemCapability.Ability.AbilityRuntime.Core 237 238**System API**: This is a system API and cannot be called by third-party applications. 239 240**Parameters** 241 242| Name| Type| Mandatory| Description| 243| -------- | -------- | -------- | -------- | 244| want |[Want](js-apis-app-ability-want.md)| Yes| Want information related to this ServiceExtensionAbility, including the ability name and bundle name.| 245 246**Example** 247 248 ```ts 249 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 250 import Want from '@ohos.app.ability.Want'; 251 252 class ServiceExt extends ServiceExtension { 253 onReconnect(want: Want) { 254 console.log('onReconnect, want: ${want.abilityName}'); 255 } 256 } 257 ``` 258 259## ServiceExtensionAbility.onConfigurationUpdate 260 261onConfigurationUpdate(newConfig: Configuration): void; 262 263Called when the configuration of this ServiceExtensionAbility is updated. 264 265**System capability**: SystemCapability.Ability.AbilityRuntime.Core 266 267**System API**: This is a system API and cannot be called by third-party applications. 268 269**Parameters** 270 271| Name| Type| Mandatory| Description| 272| -------- | -------- | -------- | -------- | 273| newConfig | [Configuration](js-apis-app-ability-configuration.md) | Yes| New configuration.| 274 275**Example** 276 277 ```ts 278 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 279 import { Configuration } from '@ohos.app.ability.Configuration'; 280 281 class ServiceExt extends ServiceExtension { 282 onConfigurationUpdate(config: Configuration) { 283 console.log(`onConfigurationUpdate, config: ${JSON.stringify(config)}`); 284 } 285 } 286 ``` 287 288## ServiceExtensionAbility.onDump 289 290onDump(params: Array\<string>): Array\<string>; 291 292Dumps the client information. 293 294**System capability**: SystemCapability.Ability.AbilityRuntime.Core 295 296**System API**: This is a system API and cannot be called by third-party applications. 297 298**Parameters** 299 300| Name| Type| Mandatory| Description| 301| -------- | -------- | -------- | -------- | 302| params | Array\<string> | Yes| Parameters in the form of a command.| 303 304**Example** 305 306 ```ts 307 import ServiceExtension from '@ohos.app.ability.ServiceExtensionAbility'; 308 309 class ServiceExt extends ServiceExtension { 310 onDump(params: Array<string>) { 311 console.log(`dump, params: ${JSON.stringify(params)}`); 312 return ['params']; 313 } 314 } 315 ``` 316