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:

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');
  }
}
  1. 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

"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:

This sample shows how to:

Create a Service Extension ability in the ServiceExtAbility.ts file in the ServiceExtensionAbility directory.