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
m00512953 已提交
205
  import AbilityConstant from "@ohos.app.ability.AbilityConstant"
Z
zhongjianfei 已提交
206
  class MyUIAbility extends UIAbility {
M
m00512953 已提交
207 208 209
      onContinue(wantParams) {
          console.log('onContinue');
          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 262 263 264 265 266 267
          console.log('dump, params:' + JSON.stringify(params));
          return ["params"]
      }
  }
  ```


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
m00512953 已提交
292
import AbilityConstant from '@ohos.app.ability.AbilityConstant'
M
m00512953 已提交
293

Z
zhongjianfei 已提交
294
class MyUIAbility extends UIAbility {
M
m00512953 已提交
295 296 297
    onSaveState(reason, wantParam) {
        console.log('onSaveState');
        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
    }
}
  ```



## Caller

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

## Caller.call

D
dy_study 已提交
311
call(method: string, data: rpc.Parcelable): Promise&lt;void&gt;;
M
m00512953 已提交
312 313 314

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

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

**参数:**

Z
zhongjianfei 已提交
319 320 321
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| method | string | 是 | 约定的服务端注册事件字符串。 |
D
dy_study 已提交
322
| data | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 是 | 由开发者实现的Parcelable可序列化数据。 |
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

**示例:**
    
  ```ts
D
dy_study 已提交
341
  class MyMessageAble{ // 自定义的Parcelable数据结构
M
m00512953 已提交
342 343 344 345 346 347 348
    name:""
    str:""
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
D
dy_study 已提交
349 350 351
    marshalling(messageSequence) {
      messageSequence.writeInt(this.num);
      messageSequence.writeString(this.str);
M
m00512953 已提交
352 353 354
      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
D
dy_study 已提交
355 356 357
    unmarshalling(messageSequence) {
      this.num = messageSequence.readInt();
      this.str = messageSequence.readString();
M
m00512953 已提交
358 359 360 361
      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
m00512953 已提交
367
        bundleName: "com.example.myservice",
Z
zhongjianfei 已提交
368
        abilityName: "MainUIAbility",
M
m00512953 已提交
369 370 371
        deviceId: ""
      }).then((obj) => {
        caller = obj;
D
dy_study 已提交
372
        let msg = new MyMessageAble("msg", "world"); // 参考Parcelable数据定义
M
m00512953 已提交
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
        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

D
dy_study 已提交
392
callWithResult(method: string, data: rpc.Parcelable): Promise&lt;rpc.MessageSequence&gt;;
M
m00512953 已提交
393 394 395

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

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

**参数:**

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

**返回值:**

Z
zhongjianfei 已提交
407 408
| 类型 | 说明 |
| -------- | -------- |
D
dy_study 已提交
409
| Promise&lt;[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)&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 423 424 425 426 427 428 429

**示例:**

  ```ts
  class MyMessageAble{
    name:""
    str:""
    num: 1
    constructor(name, str) {
      this.name = name;
      this.str = str;
    }
D
dy_study 已提交
430 431 432
    marshalling(messageSequence) {
      messageSequence.writeInt(this.num);
      messageSequence.writeString(this.str);
M
m00512953 已提交
433 434 435
      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
      return true;
    }
D
dy_study 已提交
436 437 438
    unmarshalling(messageSequence) {
      this.num = messageSequence.readInt();
      this.str = messageSequence.readString();
M
m00512953 已提交
439 440 441 442
      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
m00512953 已提交
448
        bundleName: "com.example.myservice",
Z
zhongjianfei 已提交
449
        abilityName: "MainUIAbility",
M
m00512953 已提交
450 451 452 453 454 455 456 457
        deviceId: ""
      }).then((obj) => {
        caller = obj;
        let msg = new MyMessageAble(1, "world");
        caller.callWithResult(method, msg)
          .then((data) => {
            console.log('Caller callWithResult() called');
            let retmsg = new MyMessageAble(0, "");
D
dy_study 已提交
458
            data.readParcelable(retmsg);
M
m00512953 已提交
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
          })
          .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
m00512953 已提交
497
        bundleName: "com.example.myservice",
Z
zhongjianfei 已提交
498
        abilityName: "MainUIAbility",
M
m00512953 已提交
499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515
        deviceId: ""
      }).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({
D
ability  
donglin 已提交
537
        bundleName: "com.example.myservice",
Z
zhongjianfei 已提交
538
        abilityName: "MainUIAbility",
D
ability  
donglin 已提交
539 540 541 542 543 544 545 546
        deviceId: ""
      }).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 560 561 562 563

## Caller.on

 on(type: "release", callback: OnReleaseCallback): void;

注册通用组件服务端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
m00512953 已提交
588
        bundleName: "com.example.myservice",
Z
zhongjianfei 已提交
589
        abilityName: "MainUIAbility",
M
m00512953 已提交
590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608
        deviceId: ""
      }).then((obj) => {
          caller = obj;
          try {
            caller.on("release", (str) => {
                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 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
## Caller.off

off(type: "release", callback: OnReleaseCallback): void;

取消注册通用组件服务端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 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684
  export default class MainUIAbility extends UIAbility {
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
        bundleName: "com.example.myservice",
        abilityName: "MainUIAbility",
        deviceId: ""
      }).then((obj) => {
          caller = obj;
          try {
            let onReleaseCallBack = (str) => {
                console.log(' Caller OnRelease CallBack is called ' + str);
            };
            caller.on("release", onReleaseCallBack);
            caller.off("release", onReleaseCallBack);
          } 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

off(type: "release"): void;

取消注册通用组件服务端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 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710
  export default class MainUIAbility extends UIAbility {
    onWindowStageCreate(windowStage) {
      this.context.startAbilityByCall({
        bundleName: "com.example.myservice",
        abilityName: "MainUIAbility",
        deviceId: ""
      }).then((obj) => {
          caller = obj;
          try {
            let onReleaseCallBack = (str) => {
                console.log(' Caller OnRelease CallBack is called ' + str);
            };
            caller.on("release", onReleaseCallBack);
            caller.off("release");
          } 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 | 是 | 与客户端约定的通知消息字符串。 |
D
dy_study 已提交
729
| callback | [CalleeCallback](#calleecallback) | 是 | 一个[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)类型入参的js通知同步回调函数,&nbsp;回调函数至少要返回一个空的[rpc.Parcelable](js-apis-rpc.md#parcelable9)数据对象,&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 743 744 745 746 747 748 749

**示例:**

  ```ts
  class MyMessageAble{
      name:""
      str:""
      num: 1
      constructor(name, str) {
        this.name = name;
        this.str = str;
      }
D
dy_study 已提交
750 751 752
      marshalling(messageSequence) {
          messageSequence.writeInt(this.num);
          messageSequence.writeString(this.str);
M
m00512953 已提交
753 754 755
          console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
          return true;
      }
D
dy_study 已提交
756 757 758
      unmarshalling(messageSequence) {
          this.num = messageSequence.readInt();
          this.str = messageSequence.readString();
M
m00512953 已提交
759 760 761 762
          console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
          return true;
      }
  };
M
mingxihua 已提交
763
  let method = 'call_Function';
M
m00512953 已提交
764 765 766
  function funcCallBack(pdata) {
      console.log('Callee funcCallBack is called ' + pdata);
      let msg = new MyMessageAble("test", "");
D
dy_study 已提交
767
      pdata.readParcelable(msg);
M
m00512953 已提交
768 769
      return new MyMessageAble("test1", "Callee test");
  }
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

## CalleeCallback

D
dy_study 已提交
835
(indata: rpc.MessageSequence): rpc.Parcelable;
M
m00512953 已提交
836

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

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