diff --git a/en/application-dev/ability/stage-serviceextension.md b/en/application-dev/ability/stage-serviceextension.md new file mode 100644 index 0000000000000000000000000000000000000000..b3e7dd703b5b751b13dc2936c886ccb2d34fcd00 --- /dev/null +++ b/en/application-dev/ability/stage-serviceextension.md @@ -0,0 +1,87 @@ +# Service Extension Ability Development + +## When to Use +**ExtensionAbility** is the base class of the new Extension component in the stage model. It is used to process missions without UIs. The lifecycle of an Extension ability is simple, and it does not involve foreground or background. **ServiceExtensionAbility** is extended from **ExtensionAbility**. + +You can customize a class that inherits from **ServiceExtensionAbility** and override the lifecycle callbacks in the base class to perform service logic operations during the initialization, connection, and disconnection processes. + +## Available APIs + +**Table 1** ServiceExtensionAbility lifecycle callbacks +|API|Description| +|:------|:------| +|onCreate|Called for the initialization when **startAbility** or **connectAbility** is invoked for a given ability for the first time.| +|onRequest|Called each time **startAbility** is invoked for a given ability. The initial value of **startId** is 1, and the value is incremented by one each time **startAbility** is invoked for that ability.| +|onConnect|Called when **connectAbility** is invoked for a given ability. This callback is not invoked for repeated calling of **connectAbility** for a specific ability. However, it will be invoked when **disconnectAbility** is called to disconnect an ability and then **connectAbility** is called to connect the ability again. The returned result is a **RemoteObject**.| +|onDisconnect|Called when **disconnectAbility** is called for a given ability. If the Extension ability is started by **connectAbility** and is not bound by other applications, the **onDestroy** callback will also be triggered to destroy the Extension ability.| +|onDestroy|Called when **terminateSelf** is invoked to terminate the ability.| + + +## Constraints + +- Currently, OpenHarmony does not support creation of a Service Extension ability for third-party applications. + + +## How to Develop + +1. Create a Service Extension ability. + +Customize a class that inherits from **ServiceExtensionAbility** in the .ts file and override the lifecycle callbacks of the base class. The code sample is as follows: + + ```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. Register the Service Extension ability. + +Declare the Service Extension ability in the **module.json** file by setting its **type** attribute to **service**. + +**module.json configuration example** + +```json +"extensionAbilities":[{ + "name": "ServiceExtAbility", + "icon": "$media:icon", + "description": "service", + "type": "service", + "visible": true, + "srcEntrance": "./ets/ServiceExtAbility/ServiceExtAbility.ts" +}] +``` + +## Development Example + +The following sample is provided to help you better understand how to develop a Service Extension ability: + +- [ServiceExtensionAbility]() + +This **ServiceExtensionAbility** sample shows how to: + +Create a Service Extension ability in the **ServiceExtAbility.ts** file in the **ServiceExtensionAbility** directory.