1# 创建ServiceAbility
2
3
41. 创建ServiceAbility。
5
6    通过DevEco Studio开发平台创建ServiceAbility时,DevEco Studio会默认生成onStart、onStop、onCommand方法,其他方法需要开发者自行实现,接口说明参见前述章节。开发者也可以添加其他Ability请求与ServiceAbility交互时的处理方法,示例如下:
7
8    ```ts
9    import { Want } from '@kit.AbilityKit';
10    import { rpc } from '@kit.IPCKit';
11    import { hilog } from '@kit.PerformanceAnalysisKit';
12
13    const TAG: string = '[Sample_FAModelAbilityDevelop]';
14    const domain: number = 0xFF00;
15
16    class FirstServiceAbilityStub extends rpc.RemoteObject {
17      constructor(des: Object) {
18        if (typeof des === 'string') {
19          super(des);
20        } else {
21          return;
22        }
23      }
24
25      onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, option: rpc.MessageOption): boolean {
26        hilog.info(domain, TAG, 'ServiceAbility onRemoteRequest called');
27        if (code === 1) {
28          let string = data.readString();
29          hilog.info(domain, TAG, `ServiceAbility string=${string}`);
30          let result = Array.from(string).sort().join('');
31          hilog.info(domain, TAG, `ServiceAbility result=${result}`);
32          reply.writeString(result);
33        } else {
34          hilog.info(domain, TAG, 'ServiceAbility unknown request code');
35        }
36        return true;
37      }
38    }
39
40    class ServiceAbility {
41      onStart(): void {
42        hilog.info(domain, TAG, 'ServiceAbility onStart');
43      }
44
45      onStop(): void {
46        hilog.info(domain, TAG, 'ServiceAbility onStop');
47      }
48
49      onCommand(want: Want, startId: number): void {
50        hilog.info(domain, TAG, 'ServiceAbility onCommand');
51      }
52
53      onConnect(want: Want): rpc.RemoteObject {
54        hilog.info(domain, TAG, 'ServiceAbility onDisconnect' + want);
55        return new FirstServiceAbilityStub('test');
56      }
57
58      onDisconnect(want: Want): void {
59        hilog.info(domain, TAG, 'ServiceAbility onDisconnect' + want);
60      }
61    }
62
63    export default new ServiceAbility();
64    ```
65
662. 注册ServiceAbility。
67
68    ServiceAbility需要在应用配置文件config.json中进行注册,注册类型type需要设置为service。"visible"属性表示ServiceAbility是否可以被其他应用调用,true表示可以被其他应用调用,false表示不能被其他应用调用(仅应用内可以调用)。若ServiceAbility需要被其他应用调用,注册ServiceAbility时需要设置"visible"为true,同时需要设置支持关联启动。ServiceAbility的启动规则详见[组件启动规则](component-startup-rules.md)章节。
69
70    ```json
71    {
72      ...
73      "module": {
74        ...
75        "abilities": [
76          ...
77          {
78            "name": ".ServiceAbility",
79            "srcLanguage": "ets",
80            "srcPath": "ServiceAbility",
81            "icon": "$media:icon",
82            "description": "$string:ServiceAbility_desc",
83            "type": "service",
84            "visible": true
85          },
86          ...
87        ]
88        ...
89      }
90    }
91    ```
92
93