js-apis-app-ability-uiAbility.md 25.0 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.app.ability.UIAbility (UIAbility)
M
m00512953 已提交
2

Z
zhongjianfei 已提交
3
UIAbility是包含UI界面的应用组件,提供组件创建、销毁、前后台切换等生命周期回调,同时也具备组件协同的能力,组件协同主要提供如下常用功能:
M
m00512953 已提交
4

Z
zhongjianfei 已提交
5 6
- [Caller](#caller):由[startAbilityByCall](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall)接口返回,CallerAbility(调用者)可使用Caller与CalleeAbility(被调用者)进行通信。
- [Callee](#callee):UIAbility的内部对象,CalleeAbility(被调用者)可以通过Callee与Caller进行通信。
M
m00512953 已提交
7 8 9 10 11 12 13 14 15

> **说明:**
> 
> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。  
> 本模块接口仅可在Stage模型下使用。

## 导入模块

```ts
D
donglin 已提交
16
import UIAbility from '@ohos.app.ability.UIAbility';
M
m00512953 已提交
17 18 19 20
```

## 属性

M
m00512953 已提交
21
**系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
22

Z
zhongjianfei 已提交
23
| 名称 | 类型 | 可读 | 可写 | 说明 |
M
m00512953 已提交
24
| -------- | -------- | -------- | -------- | -------- |
Z
zhongjianfei 已提交
25 26 27 28
| context | [UIAbilityContext](js-apis-inner-application-uiAbilityContext.md) | 是 | 否 | 上下文。 |
| launchWant | [Want](js-apis-app-ability-want.md) | 是 | 否 | UIAbility启动时的参数。 |
| lastRequestWant | [Want](js-apis-app-ability-want.md) | 是 | 否 | UIAbility最后请求时的参数。|
| callee | [Callee](#callee) | 是 | 否 | 调用Stub(桩)服务对象。|
M
m00512953 已提交
29

Z
zhongjianfei 已提交
30
## UIAbility.onCreate
M
m00512953 已提交
31

M
m00512953 已提交
32
onCreate(want: Want, param: AbilityConstant.LaunchParam): void;
M
m00512953 已提交
33

Z
zhongjianfei 已提交
34
UIAbility创建时回调,执行初始化业务逻辑操作。
M
m00512953 已提交
35

M
m00512953 已提交
36
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
37 38 39

**参数:**

Z
zhongjianfei 已提交
40 41 42
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| want | [Want](js-apis-app-ability-want.md) | 是 | 当前UIAbility的Want类型信息,包括ability名称、bundle名称等。 |
M
m00512953 已提交
43
| param | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#abilityconstantlaunchparam) | 是 | 创建 ability、上次异常退出的原因信息。 |
M
m00512953 已提交
44 45 46 47

**示例:**

  ```ts
Z
zhongjianfei 已提交
48
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
49 50 51 52 53 54 55
      onCreate(want, param) {
          console.log('onCreate, want:' + want.abilityName);
      }
  }
  ```


Z
zhongjianfei 已提交
56
## UIAbility.onWindowStageCreate
M
m00512953 已提交
57 58 59 60 61

onWindowStageCreate(windowStage: window.WindowStage): void

当WindowStage创建后调用。

M
m00512953 已提交
62
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
63 64 65

**参数:**

Z
zhongjianfei 已提交
66 67
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
m00512953 已提交
68
| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
M
m00512953 已提交
69 70 71 72

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
73
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
74 75 76 77 78 79 80
      onWindowStageCreate(windowStage) {
          console.log('onWindowStageCreate');
      }
  }
  ```


Z
zhongjianfei 已提交
81
## UIAbility.onWindowStageDestroy
M
m00512953 已提交
82 83 84 85 86

onWindowStageDestroy(): void

当WindowStage销毁后调用。

M
m00512953 已提交
87
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
88 89 90 91

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
92
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
93 94 95 96 97 98 99
      onWindowStageDestroy() {
          console.log('onWindowStageDestroy');
      }
  }
  ```


Z
zhongjianfei 已提交
100
## UIAbility.onWindowStageRestore
M
m00512953 已提交
101 102 103 104 105

onWindowStageRestore(windowStage: window.WindowStage): void

当迁移多实例ability时,恢复WindowStage后调用。

M
m00512953 已提交
106
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
107 108 109

**参数:**

Z
zhongjianfei 已提交
110 111
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
m00512953 已提交
112
| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
M
m00512953 已提交
113 114 115 116

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
117
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
118 119 120 121 122 123 124
      onWindowStageRestore(windowStage) {
          console.log('onWindowStageRestore');
      }
  }
  ```


Z
zhongjianfei 已提交
125
## UIAbility.onDestroy
M
m00512953 已提交
126 127 128

onDestroy(): void;

Z
zhongjianfei 已提交
129
UIAbility生命周期回调,在销毁时回调,执行资源清理等操作。
M
m00512953 已提交
130

M
m00512953 已提交
131
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
132 133 134 135

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
136
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
137 138 139 140 141 142 143
      onDestroy() {
          console.log('onDestroy');
      }
  }
  ```


Z
zhongjianfei 已提交
144
## UIAbility.onForeground
M
m00512953 已提交
145 146 147

onForeground(): void;

Z
zhongjianfei 已提交
148
UIAbility生命周期回调,当应用从后台转到前台时触发。
M
m00512953 已提交
149

M
m00512953 已提交
150
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
151 152 153 154

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
155
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
156 157 158 159 160 161 162
      onForeground() {
          console.log('onForeground');
      }
  }
  ```


Z
zhongjianfei 已提交
163
## UIAbility.onBackground
M
m00512953 已提交
164 165 166

onBackground(): void;

Z
zhongjianfei 已提交
167
UIAbility生命周期回调,当应用从前台转到后台时触发。
M
m00512953 已提交
168

M
m00512953 已提交
169
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
170 171 172 173

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
174
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
175 176 177 178 179 180 181
      onBackground() {
          console.log('onBackground');
      }
  }
  ```


Z
zhongjianfei 已提交
182
## UIAbility.onContinue
M
m00512953 已提交
183

M
m00512953 已提交
184
onContinue(wantParam : {[key: string]: any}): AbilityConstant.OnContinueResult;
M
m00512953 已提交
185 186 187

当ability迁移准备迁移时触发,保存数据。

M
m00512953 已提交
188
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
189 190 191

**参数:**

Z
zhongjianfei 已提交
192 193 194
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| wantParam | {[key: string]: any} | 是 | want相关参数。 |
M
m00512953 已提交
195 196 197

**返回值:**

Z
zhongjianfei 已提交
198 199
| 类型 | 说明 |
| -------- | -------- |
M
m00512953 已提交
200
| [AbilityConstant.OnContinueResult](js-apis-app-ability-abilityConstant.md#abilityconstantoncontinueresult) | 继续的结果。 |
M
m00512953 已提交
201 202 203 204

**示例:**
    
  ```ts
M
mingxihua 已提交
205
  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
Z
zhongjianfei 已提交
206
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
207 208
      onContinue(wantParams) {
          console.log('onContinue');
M
mingxihua 已提交
209
          wantParams['myData'] = 'my1234567';
M
m00512953 已提交
210
          return AbilityConstant.OnContinueResult.AGREE;
M
m00512953 已提交
211 212 213 214 215
      }
  }
  ```


Z
zhongjianfei 已提交
216
## UIAbility.onNewWant
M
m00512953 已提交
217

M
m00512953 已提交
218
onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void;
M
m00512953 已提交
219

M
m00512953 已提交
220
当传入新的Want,ability再次被拉起时会回调执行该方法。
M
m00512953 已提交
221

M
m00512953 已提交
222
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
223 224 225

**参数:**

Z
zhongjianfei 已提交
226 227 228
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,如ability名称,包名等。 |
M
m00512953 已提交
229
| launchParams | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#abilityconstantlaunchparam) | 是 | UIAbility启动的原因、上次异常退出的原因信息。 |
M
m00512953 已提交
230 231 232 233

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
234
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
235
      onNewWant(want, launchParams) {
M
m00512953 已提交
236
          console.log('onNewWant, want:' + want.abilityName);
M
m00512953 已提交
237
          console.log('onNewWant, launchParams:' + JSON.stringify(launchParams));
M
m00512953 已提交
238 239 240 241
      }
  }
  ```

Z
zhongjianfei 已提交
242
## UIAbility.onDump
M
m00512953 已提交
243

D
merge  
donglin 已提交
244
onDump(params: Array\<string>): Array\<string>;
M
m00512953 已提交
245 246 247

转储客户端信息时调用。

M
m00512953 已提交
248
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
249 250 251

**参数:**

Z
zhongjianfei 已提交
252 253 254
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| params | Array\<string> | 是 | 表示命令形式的参数。|
M
m00512953 已提交
255 256 257 258

**示例:**
    
  ```ts
Z
zhongjianfei 已提交
259
  class MyUIAbility extends UIAbility {
D
merge  
donglin 已提交
260
      onDump(params) {
M
m00512953 已提交
261
          console.log('dump, params:' + JSON.stringify(params));
M
mingxihua 已提交
262
          return ['params'];
M
m00512953 已提交
263 264 265 266 267
      }
  }
  ```


Z
zhongjianfei 已提交
268
## UIAbility.onSaveState
M
m00512953 已提交
269

M
m00512953 已提交
270
onSaveState(reason: AbilityConstant.StateType, wantParam : {[key: string]: any}): AbilityConstant.OnSaveResult;
M
m00512953 已提交
271

Z
zhongjianfei 已提交
272
该API配合[appRecovery](js-apis-app-ability-appRecovery.md)使用。在应用故障时,如果使能了自动保存状态,框架将回调onSaveState保存UIAbility状态。
M
m00512953 已提交
273

M
m00512953 已提交
274
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
275 276 277

**参数:**

Z
zhongjianfei 已提交
278 279
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
m00512953 已提交
280
| reason | [AbilityConstant.StateType](js-apis-app-ability-abilityConstant.md#abilityconstantstatetype) | 是 | 回调保存状态的原因。 |
Z
zhongjianfei 已提交
281
| wantParam | {[key:&nbsp;string]:&nbsp;any} | 是 | want相关参数。 |
M
m00512953 已提交
282 283 284

**返回值:**

Z
zhongjianfei 已提交
285 286
| 类型 | 说明 |
| -------- | -------- |
M
m00512953 已提交
287
| [AbilityConstant.OnSaveResult](js-apis-app-ability-abilityConstant.md#abilityconstantonsaveresult) | 是否同意保存当前UIAbility的状态。 |
M
m00512953 已提交
288 289 290 291

**示例:**

  ```ts
M
mingxihua 已提交
292
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
M
m00512953 已提交
293

Z
zhongjianfei 已提交
294
class MyUIAbility extends UIAbility {
M
m00512953 已提交
295 296
    onSaveState(reason, wantParam) {
        console.log('onSaveState');
M
mingxihua 已提交
297
        wantParam['myData'] = 'my1234567';
M
m00512953 已提交
298
        return AbilityConstant.OnSaveResult.RECOVERY_AGREE;
M
m00512953 已提交
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
    }
}
  ```



## Caller

通用组件Caller通信客户端调用接口, 用来向通用组件服务端发送约定数据。

## Caller.call

call(method: string, data: rpc.Sequenceable): Promise&lt;void&gt;;

向通用组件服务端发送约定序列化数据。

M
m00512953 已提交
315
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
316 317 318

**参数:**

Z
zhongjianfei 已提交
319 320 321
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 约定的服务端注册事件字符串。 |
M
m00512953 已提交
322
| data | [rpc.Sequenceable](js-apis-rpc.md#sequenceabledeprecated) | 是 | 由开发者实现的Sequenceable可序列化数据。 |
M
m00512953 已提交
323 324 325

**返回值:**

Z
zhongjianfei 已提交
326 327 328
| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;void&gt; | Promise形式返回应答。 |
M
m00512953 已提交
329 330 331 332 333

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
D
merge  
donglin 已提交
334
| 401 | If the input parameter is not valid parameter. |
D
donglin 已提交
335 336

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
337 338 339 340 341

**示例:**
    
  ```ts
  class MyMessageAble{ // 自定义的Sequenceable数据结构
M
mingxihua 已提交
342 343
    name:''
    str:''
M
m00512953 已提交
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
    marshalling(messageParcel) {
      messageParcel.writeInt(this.num);
      messageParcel.writeString(this.str);
      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
    unmarshalling(messageParcel) {
      this.num = messageParcel.readInt();
      this.str = messageParcel.readString();
      console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
  };
M
mingxihua 已提交
362 363
  let method = 'call_Function'; // 约定的通知消息字符串
  let caller;
Z
zhongjianfei 已提交
364
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
365
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
366
      this.context.startAbilityByCall({
M
mingxihua 已提交
367 368 369
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
370 371
      }).then((obj) => {
        caller = obj;
M
mingxihua 已提交
372
        let msg = new MyMessageAble('msg', 'world'); // 参考Sequenceable数据定义
M
m00512953 已提交
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
        caller.call(method, msg)
          .then(() => {
            console.log('Caller call() called');
          })
          .catch((callErr) => {
            console.log('Caller.call catch error, error.code: ' + JSON.stringify(callErr.code) +
              ' error.message: ' + JSON.stringify(callErr.message));
          });
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
  }
  ```


## Caller.callWithResult

callWithResult(method: string, data: rpc.Sequenceable): Promise&lt;rpc.MessageParcel&gt;;

向通用组件服务端发送约定序列化数据, 并将服务端返回的约定序列化数据带回。

M
m00512953 已提交
396
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
397 398 399

**参数:**

Z
zhongjianfei 已提交
400 401 402
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 约定的服务端注册事件字符串。 |
M
m00512953 已提交
403
| data | [rpc.Sequenceable](js-apis-rpc.md#sequenceabledeprecated) | 是 | 由开发者实现的Sequenceable可序列化数据。 |
M
m00512953 已提交
404 405 406

**返回值:**

Z
zhongjianfei 已提交
407 408
| 类型 | 说明 |
| -------- | -------- |
M
m00512953 已提交
409
| Promise&lt;[rpc.MessageParcel](js-apis-rpc.md#sequenceabledeprecated)&gt; | Promise形式返回通用组件服务端应答数据。 |
M
m00512953 已提交
410 411 412 413 414

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
D
merge  
donglin 已提交
415
| 401 | If the input parameter is not valid parameter. |
D
donglin 已提交
416 417

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
418 419 420 421 422

**示例:**

  ```ts
  class MyMessageAble{
M
mingxihua 已提交
423 424
    name:''
    str:''
M
m00512953 已提交
425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
    marshalling(messageParcel) {
      messageParcel.writeInt(this.num);
      messageParcel.writeString(this.str);
      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
    unmarshalling(messageParcel) {
      this.num = messageParcel.readInt();
      this.str = messageParcel.readString();
      console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
  };
M
mingxihua 已提交
443 444
  let method = 'call_Function';
  let caller;
Z
zhongjianfei 已提交
445
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
446
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
447
      this.context.startAbilityByCall({
M
mingxihua 已提交
448 449 450
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
451 452
      }).then((obj) => {
        caller = obj;
M
mingxihua 已提交
453
        let msg = new MyMessageAble(1, 'world');
M
m00512953 已提交
454 455 456
        caller.callWithResult(method, msg)
          .then((data) => {
            console.log('Caller callWithResult() called');
M
mingxihua 已提交
457
            let retmsg = new MyMessageAble(0, '');
M
m00512953 已提交
458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
            data.readSequenceable(retmsg);
          })
          .catch((callErr) => {
            console.log('Caller.callWithResult catch error, error.code: ' + JSON.stringify(callErr.code) +
              ' error.message: ' + JSON.stringify(callErr.message));
          });
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
  }
  ```


## Caller.release

release(): void;

主动释放通用组件服务端的通信接口。

M
m00512953 已提交
479
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
480 481 482 483 484 485 486 487 488 489 490 491 492

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | Invalid input parameter. |
| 16200001 | Caller released. The caller has been released. |
| 16200002 | Callee invalid. The callee does not exist. |
| 16000050 | Internal Error. |

**示例:**
    
  ```ts
M
mingxihua 已提交
493
  let caller;
Z
zhongjianfei 已提交
494
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
495
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
496
      this.context.startAbilityByCall({
M
mingxihua 已提交
497 498 499
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515
      }).then((obj) => {
        caller = obj;
        try {
          caller.release();
        } catch (releaseErr) {
          console.log('Caller.release catch error, error.code: ' + JSON.stringify(releaseErr.code) +
            ' error.message: ' + JSON.stringify(releaseErr.message));
        }
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
  }
  ```

D
ability  
donglin 已提交
516 517 518 519 520 521
## Caller.onRelease

 onRelease(callback: OnReleaseCallBack): void;

注册通用组件服务端Stub(桩)断开监听通知。

M
m00512953 已提交
522
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
D
ability  
donglin 已提交
523 524 525

**参数:**

Z
zhongjianfei 已提交
526 527
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
M
m00512953 已提交
528
| callback | [OnReleaseCallBack](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
D
ability  
donglin 已提交
529 530 531 532

**示例:**
    
  ```ts
M
mingxihua 已提交
533
  let caller;
Z
zhongjianfei 已提交
534
  export default class MainUIAbility extends UIAbility {
D
ability  
donglin 已提交
535
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
536
      this.context.startAbilityByCall({
M
mingxihua 已提交
537 538 539
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
D
ability  
donglin 已提交
540 541 542 543 544 545 546
      }).then((obj) => {
          caller = obj;
          try {
            caller.onRelease((str) => {
                console.log(' Caller OnRelease CallBack is called ' + str);
            });
          } catch (error) {
M
mingxihua 已提交
547
            console.log('Caller.onRelease catch error, error.code: ' + JSON.stringify(error.code) +
D
ability  
donglin 已提交
548 549 550 551 552 553 554 555 556
              ' error.message: ' + JSON.stringify(error.message));
          }
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
  }
  ```
M
m00512953 已提交
557 558 559

## Caller.on

M
mingxihua 已提交
560
 on(type: 'release', callback: OnReleaseCallback): void;
M
m00512953 已提交
561 562 563

注册通用组件服务端Stub(桩)断开监听通知。

M
m00512953 已提交
564
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
565 566 567

**参数:**

Z
zhongjianfei 已提交
568 569 570
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
M
m00512953 已提交
571
| callback | [OnReleaseCallBack](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
M
m00512953 已提交
572 573 574 575 576

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
D
merge  
donglin 已提交
577
| 401 | If the input parameter is not valid parameter. |
D
donglin 已提交
578 579

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
580 581 582 583

**示例:**
    
  ```ts
M
mingxihua 已提交
584
  let caller;
Z
zhongjianfei 已提交
585
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
586
    onWindowStageCreate(windowStage) {
M
mingxihua 已提交
587
      this.context.startAbilityByCall({
M
mingxihua 已提交
588 589 590
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
m00512953 已提交
591 592 593
      }).then((obj) => {
          caller = obj;
          try {
M
mingxihua 已提交
594
            caller.on('release', (str) => {
M
m00512953 已提交
595 596 597 598 599 600 601 602 603 604 605 606 607 608
                console.log(' Caller OnRelease CallBack is called ' + str);
            });
          } catch (error) {
            console.log('Caller.on catch error, error.code: ' + JSON.stringify(error.code) +
              ' error.message: ' + JSON.stringify(error.message));
          }
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
  }
  ```

M
mingxihua 已提交
609 610
## Caller.off

M
mingxihua 已提交
611
off(type: 'release', callback: OnReleaseCallback): void;
M
mingxihua 已提交
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633

取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
| callback | [OnReleaseCallBack](#onreleasecallback) | 是 | 返回off回调结果。 |

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | If the input parameter is not valid parameter. |
其他ID见[元能力子系统错误码](../errorcodes/errorcode-ability.md)

**示例:**
    
  ```ts
M
mingxihua 已提交
634
  let caller;
M
mingxihua 已提交
635 636 637
  export default class MainUIAbility extends UIAbility {
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
M
mingxihua 已提交
638 639 640
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
mingxihua 已提交
641 642 643 644 645 646
      }).then((obj) => {
          caller = obj;
          try {
            let onReleaseCallBack = (str) => {
                console.log(' Caller OnRelease CallBack is called ' + str);
            };
M
mingxihua 已提交
647 648
            caller.on('release', onReleaseCallBack);
            caller.off('release', onReleaseCallBack);
M
mingxihua 已提交
649 650 651 652 653 654 655 656 657 658 659 660 661 662
          } catch (error) {
            console.log('Caller.on or Caller.off catch error, error.code: ' + JSON.stringify(error.code) +
              ' error.message: ' + JSON.stringify(error.message));
          }
      }).catch((err) => {
        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
  }
  ```

## Caller.off

M
mingxihua 已提交
663
off(type: 'release'): void;
M
mingxihua 已提交
664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684

取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。

**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| type | string | 是 | 监听releaseCall事件,固定为'release'。 |

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
| 401 | If the input parameter is not valid parameter. |
其他ID见[元能力子系统错误码](../errorcodes/errorcode-ability.md)

**示例:**
    
  ```ts
M
mingxihua 已提交
685
  let caller;
M
mingxihua 已提交
686 687 688
  export default class MainUIAbility extends UIAbility {
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
M
mingxihua 已提交
689 690 691
        bundleName: 'com.example.myservice',
        abilityName: 'MainUIAbility',
        deviceId: ''
M
mingxihua 已提交
692 693 694 695 696 697
      }).then((obj) => {
          caller = obj;
          try {
            let onReleaseCallBack = (str) => {
                console.log(' Caller OnRelease CallBack is called ' + str);
            };
M
mingxihua 已提交
698 699
            caller.on('release', onReleaseCallBack);
            caller.off('release');
M
mingxihua 已提交
700 701 702 703 704 705 706 707 708 709 710
          } catch (error) {  
            console.error('Caller.on or Caller.off catch error, error.code: ' + JSON.stringify(error.code) +
              ' error.message: ' + JSON.stringify(error.message));
          }
      }).catch((err) => {
        console.error('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
          ' error.message: ' + JSON.stringify(err.message));
      });
    }
  }
  ```
M
m00512953 已提交
711 712 713 714 715 716 717

## Callee

通用组件服务端注册和解除客户端caller通知送信的callback接口。

## Callee.on

D
merge  
donglin 已提交
718
on(method: string, callback: CalleeCallback): void;
M
m00512953 已提交
719 720 721

通用组件服务端注册消息通知callback。

M
m00512953 已提交
722
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
723 724 725

**参数:**

Z
zhongjianfei 已提交
726 727 728
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 与客户端约定的通知消息字符串。 |
M
m00512953 已提交
729
| callback | [CalleeCallback](#calleecallback) | 是 | 一个[rpc.MessageParcel](js-apis-rpc.md#messageparceldeprecated)类型入参的js通知同步回调函数,&nbsp;回调函数至少要返回一个空的[rpc.Sequenceable](js-apis-rpc.md#sequenceabledeprecated)数据对象,&nbsp;其他视为函数执行错误。 |
M
m00512953 已提交
730 731 732 733 734

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
D
merge  
donglin 已提交
735
| 401 | If the input parameter is not valid parameter. |
D
donglin 已提交
736 737

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
738 739 740 741 742

**示例:**

  ```ts
  class MyMessageAble{
M
mingxihua 已提交
743 744
      name:''
      str:''
M
m00512953 已提交
745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
      num: 1
      constructor(name, str) {
        this.name = name;
        this.str = str;
      }
      marshalling(messageParcel) {
          messageParcel.writeInt(this.num);
          messageParcel.writeString(this.str);
          console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
          return true;
      }
      unmarshalling(messageParcel) {
          this.num = messageParcel.readInt();
          this.str = messageParcel.readString();
          console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
          return true;
      }
  };
M
mingxihua 已提交
763
  let method = 'call_Function';
M
m00512953 已提交
764 765
  function funcCallBack(pdata) {
      console.log('Callee funcCallBack is called ' + pdata);
M
mingxihua 已提交
766
      let msg = new MyMessageAble('test', '');
M
m00512953 已提交
767
      pdata.readSequenceable(msg);
M
mingxihua 已提交
768
      return new MyMessageAble('test1', 'Callee test');
M
m00512953 已提交
769
  }
Z
zhongjianfei 已提交
770
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788
    onCreate(want, launchParam) {
      console.log('Callee onCreate is called');
      try {
        this.callee.on(method, funcCallBack);
      } catch (error) {
        console.log('Callee.on catch error, error.code: ' + JSON.stringify(error.code) +
          ' error.message: ' + JSON.stringify(error.message));
      }
    }
  }
  ```

## Callee.off

off(method: string): void;

解除通用组件服务端注册消息通知callback。

M
m00512953 已提交
789
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
790 791 792

**参数:**

Z
zhongjianfei 已提交
793 794 795
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 已注册的通知事件字符串。 |
M
m00512953 已提交
796 797 798 799 800

**错误码:**

| 错误码ID | 错误信息 |
| ------- | -------------------------------- |
D
merge  
donglin 已提交
801
| 401 | If the input parameter is not valid parameter. |
D
donglin 已提交
802 803

以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)
M
m00512953 已提交
804 805 806 807 808


**示例:**
    
  ```ts
M
mingxihua 已提交
809
  let method = 'call_Function';
Z
zhongjianfei 已提交
810
  export default class MainUIAbility extends UIAbility {
M
m00512953 已提交
811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826
    onCreate(want, launchParam) {
      console.log('Callee onCreate is called');
      try {
        this.callee.off(method);
      } catch (error) {
        console.log('Callee.off catch error, error.code: ' + JSON.stringify(error.code) +
          ' error.message: ' + JSON.stringify(error.message));
      }
    }
  }
  ```

## OnReleaseCallback

(msg: string): void;

M
m00512953 已提交
827
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
828

Z
zhongjianfei 已提交
829
| 名称 | 可读 | 可写 | 类型 | 说明 |
M
m00512953 已提交
830
| -------- | -------- | -------- | -------- | -------- |
Z
zhongjianfei 已提交
831
| (msg: string) | 是 | 否 | function | 调用者注册的侦听器函数接口的原型。 |
M
m00512953 已提交
832 833 834 835 836

## CalleeCallback

(indata: rpc.MessageParcel): rpc.Sequenceable;

M
m00512953 已提交
837
**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
M
m00512953 已提交
838

Z
zhongjianfei 已提交
839
| 名称 | 可读 | 可写 | 类型 | 说明 |
M
m00512953 已提交
840
| -------- | -------- | -------- | -------- | -------- |
M
m00512953 已提交
841
| (indata: [rpc.MessageParcel](js-apis-rpc.md#messageparceldeprecated)) | 是 | 否 | [rpc.Sequenceable](js-apis-rpc.md#sequenceabledeprecated) | 被调用方注册的消息侦听器函数接口的原型。 |