• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.app.ability.UIAbility (UIAbility)
2
3UIAbility是包含UI界面的应用组件,提供组件创建、销毁、前后台切换等生命周期回调,同时也具备组件协同的能力,组件协同主要提供如下常用功能:
4
5- [Caller](#caller):由[startAbilityByCall](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartabilitybycall)接口返回,CallerAbility(调用者)可使用Caller与CalleeAbility(被调用者)进行通信。
6- [Callee](#callee):UIAbility的内部对象,CalleeAbility(被调用者)可以通过Callee与Caller进行通信。
7
8> **说明:**
9>
10> 本模块首批接口从API version 9 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
11> 本模块接口仅可在Stage模型下使用。
12
13## 导入模块
14
15```ts
16import Ability from '@ohos.app.ability.UIAbility';
17```
18
19## 属性
20
21**系统能力**:以下各项对应的系统能力均为SystemCapability.Ability.AbilityRuntime.AbilityCore
22
23| 名称 | 类型 | 可读 | 可写 | 说明 |
24| -------- | -------- | -------- | -------- | -------- |
25| context | [UIAbilityContext](js-apis-inner-application-uiAbilityContext.md) | 是 | 否 | 上下文。 |
26| launchWant | [Want](js-apis-app-ability-want.md) | 是 | 否 | UIAbility启动时的参数。 |
27| lastRequestWant | [Want](js-apis-app-ability-want.md) | 是 | 否 | UIAbility最后请求时的参数。 |
28| callee | [Callee](#callee) | 是 | 否 | 调用Stub(桩)服务对象。|
29
30## UIAbility.onCreate
31
32onCreate(want: Want, param: AbilityConstant.LaunchParam): void;
33
34Ability创建时回调,执行初始化业务逻辑操作。
35
36**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
37
38**参数:**
39
40| 参数名 | 类型 | 必填 | 说明 |
41| -------- | -------- | -------- | -------- |
42| want | [Want](js-apis-app-ability-want.md) | 是 | 当前UIAbility的Want类型信息,包括ability名称、bundle名称等。 |
43| param | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#abilityconstantlaunchparam) | 是 | 创建UIAbility、上次异常退出的原因信息。 |
44
45**示例:**
46
47  ```ts
48  class myAbility extends Ability {
49      onCreate(want, param) {
50          console.log('onCreate, want:' + want.abilityName);
51      }
52  }
53  ```
54
55
56## UIAbility.onWindowStageCreate
57
58onWindowStageCreate(windowStage: window.WindowStage): void
59
60当WindowStage创建后调用。
61
62**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
63
64**参数:**
65
66| 参数名 | 类型 | 必填 | 说明 |
67| -------- | -------- | -------- | -------- |
68| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
69
70**示例:**
71
72  ```ts
73  class myAbility extends Ability {
74      onWindowStageCreate(windowStage) {
75          console.log('onWindowStageCreate');
76      }
77  }
78  ```
79
80
81## UIAbility.onWindowStageDestroy
82
83onWindowStageDestroy(): void
84
85当WindowStage销毁后调用。
86
87**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
88
89**示例:**
90
91  ```ts
92  class myAbility extends Ability {
93      onWindowStageDestroy() {
94          console.log('onWindowStageDestroy');
95      }
96  }
97  ```
98
99
100## UIAbility.onWindowStageRestore
101
102onWindowStageRestore(windowStage: window.WindowStage): void
103
104当迁移多实例ability时,恢复WindowStage后调用。
105
106**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
107
108**参数:**
109
110| 参数名 | 类型 | 必填 | 说明 |
111| -------- | -------- | -------- | -------- |
112| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
113
114**示例:**
115
116  ```ts
117  class myAbility extends Ability {
118      onWindowStageRestore(windowStage) {
119          console.log('onWindowStageRestore');
120      }
121  }
122  ```
123
124
125## UIAbility.onDestroy
126
127onDestroy(): void | Promise<void>;
128
129Ability生命周期回调,在销毁时回调,执行资源清理等操作。
130
131**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
132
133**示例:**
134
135  ```ts
136  class myAbility extends Ability {
137      onDestroy() {
138          console.log('onDestroy');
139      }
140  }
141  ```
142
143
144## UIAbility.onForeground
145
146onForeground(): void;
147
148Ability生命周期回调,当应用从后台转到前台时触发。
149
150**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
151
152**示例:**
153
154  ```ts
155  class myAbility extends Ability {
156      onForeground() {
157          console.log('onForeground');
158      }
159  }
160  ```
161
162
163## UIAbility.onBackground
164
165onBackground(): void;
166
167Ability生命周期回调,当应用从前台转到后台时触发。
168
169**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
170
171**示例:**
172
173  ```ts
174  class myAbility extends Ability {
175      onBackground() {
176          console.log('onBackground');
177      }
178  }
179  ```
180
181
182## UIAbility.onContinue
183
184onContinue(wantParam: { [key: string]: Object }): AbilityConstant.OnContinueResult;
185
186当ability迁移准备迁移时触发,保存数据。
187
188**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
189
190**参数:**
191
192| 参数名 | 类型 | 必填 | 说明 |
193| -------- | -------- | -------- | -------- |
194| wantParam | {[key: string]: any} | 是 | want相关参数。 |
195
196**返回值:**
197
198| 类型 | 说明 |
199| -------- | -------- |
200| [AbilityConstant.OnContinueResult](js-apis-app-ability-abilityConstant.md#abilityconstantoncontinueresult) | 继续的结果。 |
201
202**示例:**
203
204  ```ts
205  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
206  class MyUIAbility extends Ability {
207      onContinue(wantParams) {
208          console.log('onContinue');
209          wantParams['myData'] = 'my1234567';
210          return AbilityConstant.OnContinueResult.AGREE;
211      }
212  }
213  ```
214
215
216## UIAbility.onNewWant
217
218onNewWant(want: Want, launchParams: AbilityConstant.LaunchParam): void;
219
220当传入新的Want,ability再次被拉起时会回调执行该方法。
221
222**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
223
224**参数:**
225
226| 参数名 | 类型 | 必填 | 说明 |
227| -------- | -------- | -------- | -------- |
228| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,如ability名称,包名等。 |
229| launchParams | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#abilityconstantlaunchparam) | 是 | UIAbility启动的原因、上次异常退出的原因信息。 |
230
231**示例:**
232
233  ```ts
234   class MyUIAbility extends Ability {
235      onNewWant(want, launchParams) {
236          console.log('onNewWant, want:' + want.abilityName);
237          console.log('onNewWant, launchParams:' + JSON.stringify(launchParams));
238       }
239   }
240  ```
241
242## UIAbility.onDump
243
244onDump(params: Array\<string>): Array\<string>;
245
246转储客户端信息时调用。
247
248**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
249
250**参数:**
251
252| 参数名 | 类型 | 必填 | 说明 |
253| -------- | -------- | -------- | -------- |
254| params | Array\<string> | 是 | 表示命令形式的参数。|
255
256**示例:**
257
258  ```ts
259  class myAbility extends Ability {
260      onDump(params) {
261          console.log('dump, params:' + JSON.stringify(params));
262          return ['params'];
263      }
264  }
265  ```
266
267
268## UIAbility.onSaveState
269
270onSaveState(reason: AbilityConstant.StateType, wantParam : {[key: string]: Object}): AbilityConstant.OnSaveResult;
271
272该API配合[appRecovery](js-apis-app-ability-appRecovery.md)使用。在应用故障时,如果使能了自动保存状态,框架将回调onSaveState保存Ability状态。
273
274**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
275
276**参数:**
277
278| 参数名 | 类型 | 必填 | 说明 |
279| -------- | -------- | -------- | -------- |
280| reason | [AbilityConstant.StateType](js-apis-app-ability-abilityConstant.md#abilityconstantstatetype) | 是 | 回调保存状态的原因。 |
281| wantParam | {[key:&nbsp;string]:&nbsp;any} | 是 | want相关参数。 |
282
283**返回值:**
284
285| 类型 | 说明 |
286| -------- | -------- |
287| AbilityConstant.OnSaveResult | 是否同意保存当前Ability的状态。 |
288
289**示例:**
290
291  ```ts
292import AbilityConstant from '@ohos.app.ability.AbilityConstant';
293
294class MyUIAbility extends Ability {
295    onSaveState(reason, wantParam) {
296        console.log('onSaveState');
297        wantParam['myData'] = 'my1234567';
298        return AbilityConstant.OnSaveResult.RECOVERY_AGREE;
299    }
300}
301  ```
302
303
304
305## Caller
306
307通用组件Caller通信客户端调用接口, 用来向通用组件服务端发送约定数据。
308
309## Caller.call
310
311call(method: string, data: rpc.Parcelable): Promise&lt;void&gt;;
312
313向通用组件服务端发送约定序列化数据。
314
315**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
316
317**参数:**
318
319  | 参数名 | 类型 | 必填 | 说明 |
320  | -------- | -------- | -------- | -------- |
321  | method | string | 是 | 约定的服务端注册事件字符串。 |
322  | data | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 是 | 由开发者实现的Parcelable可序列化数据。 |
323
324**返回值:**
325
326| 类型 | 说明 |
327| -------- | -------- |
328| Promise&lt;void&gt; | Promise形式返回应答。 |
329
330**错误码:**
331
332| 错误码ID | 错误信息 |
333| ------- | -------------------------------- |
334| 16200001 | Caller released. The caller has been released. |
335| 16200002 | Callee invalid. The callee does not exist. |
336| 16000050 | Internal error. |
337
338以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
339
340**示例:**
341
342  ```ts
343  class MyMessageAble{ // 自定义的Parcelable数据结构
344    name:''
345    str:''
346    num: 1
347    constructor(name, str) {
348      this.name = name;
349      this.str = str;
350    }
351    marshalling(messageSequence) {
352      messageSequence.writeInt(this.num);
353      messageSequence.writeString(this.str);
354      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
355      return true;
356    }
357    unmarshalling(messageSequence) {
358      this.num = messageSequence.readInt();
359      this.str = messageSequence.readString();
360      console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
361      return true;
362    }
363  };
364  let method = 'call_Function'; // 约定的通知消息字符串
365  let caller;
366  export default class MainAbility extends Ability {
367    onWindowStageCreate(windowStage) {
368      this.context.startAbilityByCall({
369        bundleName: 'com.example.myservice',
370        abilityName: 'MainAbility',
371        deviceId: ''
372      }).then((obj) => {
373        caller = obj;
374        let msg = new MyMessageAble('msg', 'world'); // 参考Parcelable数据定义
375        caller.call(method, msg)
376          .then(() => {
377            console.log('Caller call() called');
378          })
379          .catch((callErr) => {
380            console.log('Caller.call catch error, error.code: ' + JSON.stringify(callErr.code) +
381              ' error.message: ' + JSON.stringify(callErr.message));
382          });
383      }).catch((err) => {
384        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
385          ' error.message: ' + JSON.stringify(err.message));
386      });
387    }
388  }
389  ```
390
391
392## Caller.callWithResult
393
394callWithResult(method: string, data: rpc.Parcelable): Promise&lt;rpc.MessageSequence&gt;;
395
396向通用组件服务端发送约定序列化数据, 并将服务端返回的约定序列化数据带回。
397
398**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
399
400**参数:**
401
402  | 参数名 | 类型 | 必填 | 说明 |
403  | -------- | -------- | -------- | -------- |
404  | method | string | 是 | 约定的服务端注册事件字符串。 |
405  | data | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 是 | 由开发者实现的Parcelable可序列化数据。 |
406
407**返回值:**
408
409  | 类型 | 说明 |
410  | -------- | -------- |
411  | Promise&lt;[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)&gt; | Promise形式返回通用组件服务端应答数据。 |
412
413**错误码:**
414
415| 错误码ID | 错误信息 |
416| ------- | -------------------------------- |
417| 16200001 | Caller released. The caller has been released. |
418| 16200002 | Callee invalid. The callee does not exist. |
419| 16000050 | Internal error. |
420
421以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
422
423**示例:**
424
425  ```ts
426  class MyMessageAble{
427    name:''
428    str:''
429    num: 1
430    constructor(name, str) {
431      this.name = name;
432      this.str = str;
433    }
434    marshalling(messageSequence) {
435      messageSequence.writeInt(this.num);
436      messageSequence.writeString(this.str);
437      console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
438      return true;
439    }
440    unmarshalling(messageSequence) {
441      this.num = messageSequence.readInt();
442      this.str = messageSequence.readString();
443      console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
444      return true;
445    }
446  };
447  let method = 'call_Function';
448  let caller;
449  export default class MainAbility extends Ability {
450    onWindowStageCreate(windowStage) {
451      this.context.startAbilityByCall({
452        bundleName: 'com.example.myservice',
453        abilityName: 'MainAbility',
454        deviceId: ''
455      }).then((obj) => {
456        caller = obj;
457        let msg = new MyMessageAble(1, 'world');
458        caller.callWithResult(method, msg)
459          .then((data) => {
460            console.log('Caller callWithResult() called');
461            let retmsg = new MyMessageAble(0, '');
462            data.readParcelable(retmsg);
463          })
464          .catch((callErr) => {
465            console.log('Caller.callWithResult catch error, error.code: ' + JSON.stringify(callErr.code) +
466              ' error.message: ' + JSON.stringify(callErr.message));
467          });
468      }).catch((err) => {
469        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
470          ' error.message: ' + JSON.stringify(err.message));
471      });
472    }
473  }
474  ```
475
476
477## Caller.release
478
479release(): void;
480
481主动释放通用组件服务端的通信接口。
482
483**系统能力**:SystemCapability.UIAbility.UIAbilityRuntime.UIAbilityCore
484
485**错误码:**
486
487| 错误码ID | 错误信息 |
488| ------- | -------------------------------- |
489| 16200001 | Caller released. The caller has been released. |
490| 16200002 | Callee invalid. The callee does not exist. |
491
492以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
493
494**示例:**
495
496  ```ts
497  let caller;
498  export default class MainAbility extends Ability {
499    onWindowStageCreate(windowStage) {
500      this.context.startAbilityByCall({
501        bundleName: 'com.example.myservice',
502        abilityName: 'MainAbility',
503        deviceId: ''
504      }).then((obj) => {
505        caller = obj;
506        try {
507          caller.release();
508        } catch (releaseErr) {
509          console.log('Caller.release catch error, error.code: ' + JSON.stringify(releaseErr.code) +
510            ' error.message: ' + JSON.stringify(releaseErr.message));
511        }
512      }).catch((err) => {
513        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
514          ' error.message: ' + JSON.stringify(err.message));
515      });
516    }
517  }
518  ```
519
520## Caller.onRelease
521
522 onRelease(callback: OnReleaseCallback): void;
523
524注册通用组件服务端Stub(桩)断开监听通知。
525
526**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
527
528**错误码:**
529
530| 错误码ID | 错误信息 |
531| ------- | -------------------------------- |
532| 16200001 | Caller released. The caller has been released. |
533
534以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
535
536**参数:**
537
538| 参数名 | 类型 | 必填 | 说明 |
539| -------- | -------- | -------- | -------- |
540| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
541
542**示例:**
543
544  ```ts
545  let caller;
546  export default class MainAbility extends Ability {
547    onWindowStageCreate(windowStage) {
548      this.context.startAbilityByCall({
549        bundleName: 'com.example.myservice',
550        abilityName: 'MainAbility',
551        deviceId: ''
552      }).then((obj) => {
553          caller = obj;
554          try {
555            caller.onRelease((str) => {
556                console.log(' Caller OnRelease CallBack is called ' + str);
557            });
558          } catch (error) {
559            console.log('Caller.onRelease catch error, error.code: ' + JSON.stringify(error.code) +
560              ' error.message: ' + JSON.stringify(error.message));
561          }
562      }).catch((err) => {
563        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
564          ' error.message: ' + JSON.stringify(err.message));
565      });
566    }
567  }
568  ```
569
570## Caller.on
571
572on(type: 'release', callback: OnReleaseCallback): void;
573
574注册通用组件服务端Stub(桩)断开监听通知。
575
576**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
577
578**参数:**
579
580| 参数名 | 类型 | 必填 | 说明 |
581| -------- | -------- | -------- | -------- |
582| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
583| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
584
585**错误码:**
586
587| 错误码ID | 错误信息 |
588| ------- | -------------------------------- |
589| 401 | If the input parameter is not valid parameter. |
590| 16200001 | Caller released. The caller has been released. |
591
592以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
593
594**示例:**
595
596  ```ts
597  let caller;
598  export default class MainAbility extends Ability {
599    onWindowStageCreate(windowStage) {
600      this.context.startAbilityByCall({
601        bundleName: 'com.example.myservice',
602        abilityName: 'MainAbility',
603        deviceId: ''
604      }).then((obj) => {
605          caller = obj;
606          try {
607            caller.on('release', (str) => {
608                console.log(' Caller OnRelease CallBack is called ' + str);
609            });
610          } catch (error) {
611            console.log('Caller.on catch error, error.code: ' + JSON.stringify(error.code) +
612              ' error.message: ' + JSON.stringify(error.message));
613          }
614      }).catch((err) => {
615        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
616          ' error.message: ' + JSON.stringify(err.message));
617      });
618    }
619  }
620  ```
621
622## Caller.off
623
624off(type: 'release', callback: OnReleaseCallback): void;
625
626取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。
627
628**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
629
630**参数:**
631
632| 参数名 | 类型 | 必填 | 说明 |
633| -------- | -------- | -------- | -------- |
634| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
635| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回off回调结果。 |
636
637**错误码:**
638
639| 错误码ID | 错误信息 |
640| ------- | -------------------------------- |
641| 401 | If the input parameter is not valid parameter. |
642其他ID见[元能力子系统错误码](../errorcodes/errorcode-ability.md)
643
644**示例:**
645
646  ```ts
647  let caller;
648  export default class MainUIAbility extends Ability {
649    onWindowStageCreate(windowStage) {
650      this.context.startAbilityByCall({
651        bundleName: 'com.example.myservice',
652        abilityName: 'MainUIAbility',
653        deviceId: ''
654      }).then((obj) => {
655          caller = obj;
656          try {
657            let onReleaseCallBack = (str) => {
658                console.log(' Caller OnRelease CallBack is called ' + str);
659            };
660            caller.on('release', onReleaseCallBack);
661            caller.off('release', onReleaseCallBack);
662          } catch (error) {
663            console.log('Caller.on or Caller.off catch error, error.code: ' + JSON.stringify(error.code) +
664              ' error.message: ' + JSON.stringify(error.message));
665          }
666      }).catch((err) => {
667        console.log('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
668          ' error.message: ' + JSON.stringify(err.message));
669      });
670    }
671  }
672  ```
673
674## Caller.off
675
676off(type: 'release'): void;
677
678取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。
679
680**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
681
682**参数:**
683
684| 参数名 | 类型 | 必填 | 说明 |
685| -------- | -------- | -------- | -------- |
686| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
687
688**错误码:**
689
690| 错误码ID | 错误信息 |
691| ------- | -------------------------------- |
692| 401 | If the input parameter is not valid parameter. |
693其他ID见[元能力子系统错误码](../errorcodes/errorcode-ability.md)
694
695**示例:**
696
697  ```ts
698  let caller;
699  export default class MainUIAbility extends Ability {
700    onWindowStageCreate(windowStage) {
701      this.context.startAbilityByCall({
702        bundleName: 'com.example.myservice',
703        abilityName: 'MainUIAbility',
704        deviceId: ''
705      }).then((obj) => {
706          caller = obj;
707          try {
708            let onReleaseCallBack = (str) => {
709                console.log(' Caller OnRelease CallBack is called ' + str);
710            };
711            caller.on('release', onReleaseCallBack);
712            caller.off('release');
713          } catch (error) {
714            console.error('Caller.on or Caller.off catch error, error.code: ' + JSON.stringify(error.code) +
715              ' error.message: ' + JSON.stringify(error.message));
716          }
717      }).catch((err) => {
718        console.error('Caller GetCaller error, error.code: ' + JSON.stringify(err.code) +
719          ' error.message: ' + JSON.stringify(err.message));
720      });
721    }
722  }
723  ```
724
725## Callee
726
727通用组件服务端注册和解除客户端caller通知送信的callback接口。
728
729## Callee.on
730
731on(method: string, callback: CalleeCallback): void;
732
733通用组件服务端注册消息通知callback。
734
735**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
736
737**参数:**
738
739  | 参数名 | 类型 | 必填 | 说明 |
740  | -------- | -------- | -------- | -------- |
741  | method | string | 是 | 与客户端约定的通知消息字符串。 |
742  | callback | [CalleeCallback](#calleecallback) | 是 | 一个[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)类型入参的js通知同步回调函数,&nbsp;回调函数至少要返回一个空的[rpc.Parcelable](js-apis-rpc.md#parcelable9)数据对象,&nbsp;其他视为函数执行错误。 |
743
744**错误码:**
745
746| 错误码ID | 错误信息 |
747| ------- | -------------------------------- |
748| 16200004 | Method registered. The method has registered. |
749| 16000050 | Internal error. |
750
751以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
752
753**示例:**
754
755  ```ts
756  class MyMessageAble{
757      name:''
758      str:''
759      num: 1
760      constructor(name, str) {
761        this.name = name;
762        this.str = str;
763      }
764      marshalling(messageSequence) {
765          messageSequence.writeInt(this.num);
766          messageSequence.writeString(this.str);
767          console.log('MyMessageAble marshalling num[' + this.num + '] str[' + this.str + ']');
768          return true;
769      }
770      unmarshalling(messageSequence) {
771          this.num = messageSequence.readInt();
772          this.str = messageSequence.readString();
773          console.log('MyMessageAble unmarshalling num[' + this.num + '] str[' + this.str + ']');
774          return true;
775      }
776  };
777  let method = 'call_Function';
778  function funcCallBack(pdata) {
779      console.log('Callee funcCallBack is called ' + pdata);
780      let msg = new MyMessageAble('test', '');
781      pdata.readParcelable(msg);
782      return new MyMessageAble('test1', 'Callee test');
783  }
784  export default class MainAbility extends Ability {
785    onCreate(want, launchParam) {
786      console.log('Callee onCreate is called');
787      try {
788        this.callee.on(method, funcCallBack);
789      } catch (error) {
790        console.log('Callee.on catch error, error.code: ' + JSON.stringify(error.code) +
791          ' error.message: ' + JSON.stringify(error.message));
792      }
793    }
794  }
795  ```
796
797## Callee.off
798
799off(method: string): void;
800
801解除通用组件服务端注册消息通知callback。
802
803**系统能力**:SystemCapability.UIAbility.UIAbilityRuntime.UIAbilityCore
804
805**参数:**
806
807| 参数名 | 类型 | 必填 | 说明 |
808| -------- | -------- | -------- | -------- |
809| method | string | 是 | 已注册的通知事件字符串。 |
810
811**错误码:**
812
813| 错误码ID | 错误信息 |
814| ------- | -------------------------------- |
815| 16200005 | Method not registered. The method has not registered. |
816| 16000050 | Internal error. |
817
818以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
819
820
821**示例:**
822
823  ```ts
824  let method = 'call_Function';
825  export default class MainAbility extends Ability {
826    onCreate(want, launchParam) {
827      console.log('Callee onCreate is called');
828      try {
829        this.callee.off(method);
830      } catch (error) {
831        console.log('Callee.off catch error, error.code: ' + JSON.stringify(error.code) +
832          ' error.message: ' + JSON.stringify(error.message));
833      }
834    }
835  }
836  ```
837
838## OnReleaseCallback
839
840(msg: string): void;
841
842**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
843
844| 名称 | 可读 | 可写 | 类型 | 说明 |
845| -------- | -------- | -------- | -------- | -------- |
846| (msg: string) | 是 | 否 | function | 调用者注册的侦听器函数接口的原型。 |
847
848## CalleeCallback
849
850(indata: rpc.MessageSequence): rpc.Parcelable;
851
852**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
853
854| 名称 | 可读 | 可写 | 类型 | 说明 |
855| -------- | -------- | -------- | -------- | -------- |
856| (indata: [rpc.MessageSequence](js-apis-rpc.md#messagesequence9)) | 是 | 否 | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 被调用方注册的消息侦听器函数接口的原型。 |
857