stage-serviceextension.md 2.8 KB
Newer Older
ahjxliubao2's avatar
ahjxliubao2 已提交
1 2
# ServiceExtensionAbility开发指导

ahjxliubao2's avatar
ahjxliubao2 已提交
3
## 场景介绍
ahjxliubao2's avatar
ahjxliubao2 已提交
4 5 6 7
ExtensionAbility,是Stage模型中新增的扩展组件的基类,一般用于处理无界面的任务,生命周期较简单,没有前后台生命周期。ServiceExtensionAbility是ExtensionAbility的扩展类。

开发者可以自定义类继承ServiceExtensionAbility,通过重写基类中相关生命周期方法,来做初始化、连接中、断开连接时相关业务逻辑操作。

ahjxliubao2's avatar
ahjxliubao2 已提交
8
## 接口说明
ahjxliubao2's avatar
ahjxliubao2 已提交
9

ahjxliubao2's avatar
ahjxliubao2 已提交
10 11 12 13 14 15 16 17
**表1** ServiceExtensionAbility中相关生命周期功能介绍
|接口名|描述|
|:------|:------|
|onCreate|首次调用startAbility、connectAbility时触发,开发者可以进行初始化操作。|
|onRequest|每次调用startAbility都会触发,首次调用时startId为1,重复调用startAbility递增。|
|onConnect|调用connectAbility触发,重复调用不会再次触发,除非调用disconnectAbility解除绑定后再调用;onConnect返回一个进程通信类RemoteObject。|
|onDisconnect|调用disconnectAbility触发,Extension如果是用connectAbility拉起的,并且已经没有其他应用绑定这个Extension,则会触发onDestroy生命周期销毁组件。|
|onDestroy|调用停止当前ability接口terminateSelf会触发。|
ahjxliubao2's avatar
ahjxliubao2 已提交
18 19 20 21


## 约束与限制

22
- OpenHarmony当前不支持三方应用创建ServiceExtensionAbility。
ahjxliubao2's avatar
ahjxliubao2 已提交
23 24


ahjxliubao2's avatar
ahjxliubao2 已提交
25
## 开发步骤
ahjxliubao2's avatar
ahjxliubao2 已提交
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

1.创建ServiceExtensionAbility

开发者在创建TS文件中自定义类继承ServiceExtensionAbility,重写基类回调函数,示例如下:

  ```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.注册ServiceExtensionAbility

需要在应用配置文件module.json中进行注册,注册类型type需要设置为service。

ahjxliubao2's avatar
ahjxliubao2 已提交
66
**module.json配置样例**
ahjxliubao2's avatar
ahjxliubao2 已提交
67 68 69 70 71 72 73 74 75 76 77 78

```json
"extensionAbilities":[{
    "name": "ServiceExtAbility",
    "icon": "$media:icon",
    "description": "service",
    "type": "service",
    "visible": true,
    "srcEntrance": "./ets/ServiceExtAbility/ServiceExtAbility.ts"    
}]
```

79
## 相关实例
ahjxliubao2's avatar
ahjxliubao2 已提交
80

81
针对ServiceExtensionAbility开发,有以下相关实例可供参考:
G
ge-yafang 已提交
82
- [`ServiceExtAbility`:StageExtAbility的创建与使用(eTS)(API9)](https://gitee.com/openharmony/app_samples/tree/master/ability/ServiceExtAbility)