• 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 UIAbility 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, launchParam: AbilityConstant.LaunchParam): void;
33
34UIAbility实例处于完全关闭状态下被创建完成后进入该生命周期回调,执行初始化业务逻辑操作。即UIAbility实例[冷启动](../../application-models/uiability-intra-device-interaction.md#目标uiability冷启动)时进入该生命周期回调。
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) | 是 | 创建 ability、上次异常退出的原因信息。 |
44
45**示例:**
46
47  ```ts
48  import UIAbility from '@ohos.app.ability.UIAbility';
49  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
50  import Want from '@ohos.app.ability.Want';
51
52  class MyUIAbility extends UIAbility {
53      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
54          console.log('onCreate, want: ${want.abilityName}');
55      }
56  }
57  ```
58
59
60## UIAbility.onWindowStageCreate
61
62onWindowStageCreate(windowStage: window.WindowStage): void
63
64当WindowStage创建后调用。
65
66**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
67
68**参数:**
69
70| 参数名 | 类型 | 必填 | 说明 |
71| -------- | -------- | -------- | -------- |
72| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
73
74**示例:**
75
76  ```ts
77  import UIAbility from '@ohos.app.ability.UIAbility';
78  import window from '@ohos.window';
79
80  class MyUIAbility extends UIAbility {
81      onWindowStageCreate(windowStage: window.WindowStage) {
82          console.log('onWindowStageCreate');
83      }
84  }
85  ```
86
87
88## UIAbility.onWindowStageDestroy
89
90onWindowStageDestroy(): void
91
92当WindowStage销毁后调用。
93
94**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
95
96**示例:**
97
98  ```ts
99  import UIAbility from '@ohos.app.ability.UIAbility';
100
101  class MyUIAbility extends UIAbility {
102      onWindowStageDestroy() {
103          console.log('onWindowStageDestroy');
104      }
105  }
106  ```
107
108
109## UIAbility.onWindowStageRestore
110
111onWindowStageRestore(windowStage: window.WindowStage): void
112
113当迁移多实例ability时,恢复WindowStage后调用。
114
115**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
116
117**参数:**
118
119| 参数名 | 类型 | 必填 | 说明 |
120| -------- | -------- | -------- | -------- |
121| windowStage | [window.WindowStage](js-apis-window.md#windowstage9) | 是 | WindowStage相关信息。 |
122
123**示例:**
124
125  ```ts
126  import UIAbility from '@ohos.app.ability.UIAbility';
127  import window from '@ohos.window';
128
129  class MyUIAbility extends UIAbility {
130      onWindowStageRestore(windowStage: window.WindowStage) {
131          console.log('onWindowStageRestore');
132      }
133  }
134  ```
135
136
137## UIAbility.onDestroy
138
139onDestroy(): void | Promise<void>;
140
141UIAbility生命周期回调,在销毁时回调,执行资源清理等操作。
142
143**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
144
145**示例:**
146
147
148  ```ts
149  import UIAbility from '@ohos.app.ability.UIAbility';
150
151  class MyUIAbility extends UIAbility {
152      onDestroy() {
153          console.log('onDestroy');
154      }
155  }
156  ```
157
158在执行完onDestroy生命周期回调后,应用可能会退出,从而可能导致onDestroy中的异步函数未能正确执行,比如异步写入数据库。可以使用异步生命周期,以确保异步onDestroy完成后再继续后续的生命周期。
159
160  ```ts
161import UIAbility from '@ohos.app.ability.UIAbility';
162
163class MyUIAbility extends UIAbility {
164    async onDestroy() {
165        console.log('onDestroy');
166        // 调用异步函数...
167    }
168}
169  ```
170
171## UIAbility.onForeground
172
173onForeground(): void;
174
175UIAbility生命周期回调,当应用从后台转到前台时触发。
176
177**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
178
179**示例:**
180
181  ```ts
182  import UIAbility from '@ohos.app.ability.UIAbility';
183
184  class MyUIAbility extends UIAbility {
185      onForeground() {
186          console.log('onForeground');
187      }
188  }
189  ```
190
191
192## UIAbility.onBackground
193
194onBackground(): void;
195
196UIAbility生命周期回调,当应用从前台转到后台时触发。
197
198**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
199
200**示例:**
201
202  ```ts
203  import UIAbility from '@ohos.app.ability.UIAbility';
204
205  class MyUIAbility extends UIAbility {
206      onBackground() {
207          console.log('onBackground');
208      }
209  }
210  ```
211
212
213## UIAbility.onContinue
214
215onContinue(wantParam: { [key: string]: Object }): AbilityConstant.OnContinueResult;
216
217当ability迁移准备迁移时触发,保存数据。
218
219**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
220
221**参数:**
222
223| 参数名 | 类型 | 必填 | 说明 |
224| -------- | -------- | -------- | -------- |
225| wantParam | {[key: string]: Object} | 是 | want相关参数。 |
226
227**返回值:**
228
229| 类型 | 说明 |
230| -------- | -------- |
231| [AbilityConstant.OnContinueResult](js-apis-app-ability-abilityConstant.md#abilityconstantoncontinueresult) | 继续的结果。 |
232
233**示例:**
234
235  ```ts
236  import UIAbility from '@ohos.app.ability.UIAbility';
237  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
238
239  class MyUIAbility extends UIAbility {
240      onContinue(wantParams: Record<string, Object>) {
241          console.log('onContinue');
242          wantParams['myData'] = 'my1234567';
243          return AbilityConstant.OnContinueResult.AGREE;
244      }
245  }
246  ```
247
248
249## UIAbility.onNewWant
250
251onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void;
252
253UIAbility实例已经启动并在前台运行过,由于某些原因切换到后台,再次启动该UIAbility实例时会回调执行该方法。即UIAbility实例[热启动](../../application-models/uiability-intra-device-interaction.md#目标uiability热启动)时进入该生命周期回调。
254
255**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
256
257**参数:**
258
259| 参数名 | 类型 | 必填 | 说明 |
260| -------- | -------- | -------- | -------- |
261| want | [Want](js-apis-app-ability-want.md) | 是 | Want类型参数,如ability名称,包名等。 |
262| launchParam | [AbilityConstant.LaunchParam](js-apis-app-ability-abilityConstant.md#abilityconstantlaunchparam) | 是 | UIAbility启动的原因、上次异常退出的原因信息。 |
263
264**示例:**
265
266  ```ts
267  import UIAbility from '@ohos.app.ability.UIAbility';
268  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
269
270  class MyUIAbility extends UIAbility {
271      onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
272          console.log(`onNewWant, want: ${want.abilityName}`);
273          console.log(`onNewWant, launchParam: ${JSON.stringify(launchParam)}`);
274      }
275  }
276  ```
277
278## UIAbility.onDump
279
280onDump(params: Array\<string>): Array\<string>;
281
282转储客户端信息时调用。
283
284**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
285
286**参数:**
287
288| 参数名 | 类型 | 必填 | 说明 |
289| -------- | -------- | -------- | -------- |
290| params | Array\<string> | 是 | 表示命令形式的参数。|
291
292**示例:**
293
294  ```ts
295  import UIAbility from '@ohos.app.ability.UIAbility';
296
297  class MyUIAbility extends UIAbility {
298      onDump(params: Array<string>) {
299          console.log(`dump, params: ${JSON.stringify(params)}`);
300          return ['params'];
301      }
302  }
303  ```
304
305
306## UIAbility.onSaveState
307
308onSaveState(reason: AbilityConstant.StateType, wantParam : {[key: string]: Object}): AbilityConstant.OnSaveResult;
309
310该API配合[appRecovery](js-apis-app-ability-appRecovery.md)使用。在应用故障时,如果使能了自动保存状态,框架将回调onSaveState保存UIAbility状态。
311
312**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
313
314**参数:**
315
316| 参数名 | 类型 | 必填 | 说明 |
317| -------- | -------- | -------- | -------- |
318| reason | [AbilityConstant.StateType](js-apis-app-ability-abilityConstant.md#abilityconstantstatetype) | 是 | 回调保存状态的原因。 |
319| wantParam | {[key:&nbsp;string]:&nbsp;Object} | 是 | want相关参数。 |
320
321**返回值:**
322
323| 类型 | 说明 |
324| -------- | -------- |
325| [AbilityConstant.OnSaveResult](js-apis-app-ability-abilityConstant.md#abilityconstantonsaveresult) | 是否同意保存当前UIAbility的状态。 |
326
327**示例:**
328
329  ```ts
330import UIAbility from '@ohos.app.ability.UIAbility';
331import AbilityConstant from '@ohos.app.ability.AbilityConstant';
332
333class MyUIAbility extends UIAbility {
334    onSaveState(reason: AbilityConstant.StateType, wantParam: Record<string, Object>) {
335        console.log('onSaveState');
336        wantParam['myData'] = 'my1234567';
337        return AbilityConstant.OnSaveResult.RECOVERY_AGREE;
338    }
339}
340  ```
341
342## UIAbility.onShare<sup>10+</sup>
343
344onShare(wantParam:{ [key: string]: Object }): void;
345
346在跨端分享场景下,在UIAbility中设置分享方设备要分享的数据。
347
348**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
349
350**参数:**
351
352| 参数名 | 类型 | 必填 | 说明 |
353| -------- | -------- | -------- | -------- |
354| wantParam | {[key:&nbsp;string]:&nbsp;Object} | 是 | 待分享的数据。 |
355
356**示例:**
357
358  ```ts
359import UIAbility from '@ohos.app.ability.UIAbility';
360import AbilityConstant from '@ohos.app.ability.AbilityConstant';
361
362class MyUIAbility extends UIAbility {
363    onShare(wantParams: Record<string, Object>) {
364        console.log('onShare');
365        wantParams['ohos.extra.param.key.shareUrl'] = 'example.com';
366    }
367}
368  ```
369
370## UIAbility.onPrepareToTerminate<sup>10+</sup>
371
372onPrepareToTerminate(): boolean;
373
374UIAbility生命周期回调,当系统预关闭开关打开后(配置系统参数persist.sys.prepare_terminate为true打开),在UIAbility关闭时触发,可在回调中定义操作来决定是否继续执行关闭UIAbility的操作。如果UIAbility在退出时需要与用户交互确认是否关闭UIAbility,可在此生命周期回调中定义预关闭操作配合[terminateSelf](js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateself)接口退出,如弹窗确认是否关闭,并配置预关闭生命周期返回true取消正常关闭。
375
376**需要权限**:ohos.permission.PREPARE_APP_TERMINATE
377
378**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
379
380**返回值:**
381
382| 类型 | 说明 |
383| -- | -- |
384| boolean | 是否执行UIAbility关闭操作,返回true表示本次UIAbility关闭流程取消,不再退出,返回false表示UIAbility继续正常关闭。 |
385
386**示例:**
387
388  ```ts
389  import UIAbility from '@ohos.app.ability.UIAbility';
390  import Want from '@ohos.app.ability.Want';
391  import { BusinessError } from '@ohos.base';
392
393  export default class EntryAbility extends UIAbility {
394    onPrepareToTerminate() {
395      // 开发者定义预关闭动作
396      // 例如拉起另一个ability,根据ability处理结果执行异步关闭
397      let want: Want = {
398        bundleName: "com.example.myapplication",
399        moduleName: "entry",
400        abilityName: "SecondAbility"
401      }
402      this.context.startAbilityForResult(want)
403        .then((result)=>{
404          // 获取ability处理结果,当返回结果的resultCode为0关闭当前UIAbility
405          console.log('startAbilityForResult success, resultCode is ' + result.resultCode);
406          if (result.resultCode === 0) {
407            this.context.terminateSelf();
408          }
409        }).catch((err: BusinessError)=>{
410          // 异常处理
411          console.log('startAbilityForResult failed, err:' + JSON.stringify(err));
412          this.context.terminateSelf();
413        })
414
415      return true; // 已定义预关闭操作后,返回true表示UIAbility取消关闭
416    }
417  }
418  ```
419
420## UIAbility.onBackPressed<sup>10+</sup>
421
422onBackPressed(): boolean;
423
424UIAbility生命周期回调,当UIAbility侧滑返回时触发。根据返回值决定是否销毁UIAbility,默认为销毁UIAbility。
425
426**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
427
428**返回值:**
429
430| 类型 | 说明 |
431| -- | -- |
432| boolean | 返回true表示UIAbility将会被移到后台不销毁,返回false表示UIAbility将正常销毁。 |
433
434**示例:**
435
436  ```ts
437  import UIAbility from '@ohos.app.ability.UIAbility';
438
439  export default class EntryAbility extends UIAbility {
440    onBackPressed() {
441      return true;
442    }
443  }
444  ```
445
446## Caller
447
448通用组件Caller通信客户端调用接口, 用来向通用组件服务端发送约定数据。
449
450## Caller.call
451
452call(method: string, data: rpc.Parcelable): Promise&lt;void&gt;;
453
454向通用组件服务端发送约定序列化数据。
455
456**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
457
458**参数:**
459
460| 参数名 | 类型 | 必填 | 说明 |
461| -------- | -------- | -------- | -------- |
462| method | string | 是 | 约定的服务端注册事件字符串。 |
463| data | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 是 | 由开发者实现的Parcelable可序列化数据。 |
464
465**返回值:**
466
467| 类型 | 说明 |
468| -------- | -------- |
469| Promise&lt;void&gt; | Promise形式返回应答。 |
470
471**错误码:**
472
473| 错误码ID | 错误信息 |
474| ------- | -------------------------------- |
475| 16200001 | Caller released. The caller has been released. |
476| 16200002 | Callee invalid. The callee does not exist. |
477| 16000050 | Internal error. |
478
479以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
480
481**示例:**
482
483  ```ts
484  import UIAbility from '@ohos.app.ability.UIAbility';
485  import { Caller } from '@ohos.app.ability.UIAbility';
486  import { BusinessError } from '@ohos.base';
487  import window from '@ohos.window';
488  import rpc from '@ohos.rpc';
489
490  class MyMessageAble implements rpc.Parcelable { // 自定义的Parcelable数据结构
491    name: string
492    str: string
493    num: number = 1
494    constructor(name: string, str: string) {
495      this.name = name;
496      this.str = str;
497    }
498    marshalling(messageSequence: rpc.MessageSequence) {
499      messageSequence.writeInt(this.num);
500      messageSequence.writeString(this.str);
501      console.log('MyMessageAble marshalling num[${this.num}] str[${this.str}]');
502      return true;
503    }
504    unmarshalling(messageSequence: rpc.MessageSequence) {
505      this.num = messageSequence.readInt();
506      this.str = messageSequence.readString();
507      console.log('MyMessageAble unmarshalling num[${this.num}] str[${this.str}]');
508      return true;
509    }
510  };
511  let method = 'call_Function'; // 约定的通知消息字符串
512  let caller: Caller;
513  export default class MainUIAbility extends UIAbility {
514    onWindowStageCreate(windowStage: window.WindowStage) {
515      this.context.startAbilityByCall({
516        bundleName: 'com.example.myservice',
517        abilityName: 'MainUIAbility',
518        deviceId: ''
519      }).then((obj) => {
520        caller = obj;
521        let msg = new MyMessageAble('msg', 'world'); // 参考Parcelable数据定义
522        caller.call(method, msg)
523          .then(() => {
524            console.log('Caller call() called');
525          })
526          .catch((callErr: BusinessError) => {
527            console.log('Caller.call catch error, error.code: ${callErr.code}, error.message: ${callErr.message}');
528          });
529      }).catch((err: BusinessError) => {
530        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
531      });
532    }
533  }
534  ```
535
536
537## Caller.callWithResult
538
539callWithResult(method: string, data: rpc.Parcelable): Promise&lt;rpc.MessageSequence&gt;;
540
541向通用组件服务端发送约定序列化数据, 并将服务端返回的约定序列化数据带回。
542
543**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
544
545**参数:**
546
547| 参数名 | 类型 | 必填 | 说明 |
548| -------- | -------- | -------- | -------- |
549| method | string | 是 | 约定的服务端注册事件字符串。 |
550| data | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 是 | 由开发者实现的Parcelable可序列化数据。 |
551
552**返回值:**
553
554| 类型 | 说明 |
555| -------- | -------- |
556| Promise&lt;[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)&gt; | Promise形式返回通用组件服务端应答数据。 |
557
558**错误码:**
559
560| 错误码ID | 错误信息 |
561| ------- | -------------------------------- |
562| 16200001 | Caller released. The caller has been released. |
563| 16200002 | Callee invalid. The callee does not exist. |
564| 16000050 | Internal error. |
565
566以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
567
568**示例:**
569
570  ```ts
571  import UIAbility from '@ohos.app.ability.UIAbility';
572  import { Caller } from '@ohos.app.ability.UIAbility';
573  import { BusinessError } from '@ohos.base';
574  import window from '@ohos.window';
575  import rpc from '@ohos.rpc';
576
577  class MyMessageAble implements rpc.Parcelable {
578    name: string
579    str: string
580    num: number = 1
581    constructor(name: string, str: string) {
582      this.name = name;
583      this.str = str;
584    }
585    marshalling(messageSequence: rpc.MessageSequence) {
586      messageSequence.writeInt(this.num);
587      messageSequence.writeString(this.str);
588      console.log('MyMessageAble marshalling num[${this.num}] str[${this.str}]');
589      return true;
590    }
591    unmarshalling(messageSequence: rpc.MessageSequence) {
592      this.num = messageSequence.readInt();
593      this.str = messageSequence.readString();
594      console.log('MyMessageAble unmarshalling num[${this.num] str[${this.str}]');
595      return true;
596    }
597  };
598  let method = 'call_Function';
599  let caller: Caller;
600  export default class MainUIAbility extends UIAbility {
601    onWindowStageCreate(windowStage: window.WindowStage) {
602      this.context.startAbilityByCall({
603        bundleName: 'com.example.myservice',
604        abilityName: 'MainUIAbility',
605        deviceId: ''
606      }).then((obj) => {
607        caller = obj;
608        let msg = new MyMessageAble(1, 'world');
609        caller.callWithResult(method, msg)
610          .then((data) => {
611            console.log('Caller callWithResult() called');
612            let retmsg = new MyMessageAble(0, '');
613            data.readParcelable(retmsg);
614          })
615          .catch((callErr: BusinessError) => {
616            console.log('Caller.callWithResult catch error, error.code: ${callErr.code}, error.message: ${callErr.message}');
617          });
618      }).catch((err: BusinessError) => {
619        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
620      });
621    }
622  }
623  ```
624
625
626## Caller.release
627
628release(): void;
629
630主动释放通用组件服务端的通信接口。
631
632**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
633
634**错误码:**
635
636| 错误码ID | 错误信息 |
637| ------- | -------------------------------- |
638| 16200001 | Caller released. The caller has been released. |
639| 16200002 | Callee invalid. The callee does not exist. |
640
641以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
642
643**示例:**
644
645  ```ts
646  import UIAbility from '@ohos.app.ability.UIAbility';
647  import { Caller } from '@ohos.app.ability.UIAbility';
648  import { BusinessError } from '@ohos.base';
649  import window from '@ohos.window';
650
651  let caller: Caller;
652  export default class MainUIAbility extends UIAbility {
653    onWindowStageCreate(windowStage: window.WindowStage) {
654      this.context.startAbilityByCall({
655        bundleName: 'com.example.myservice',
656        abilityName: 'MainUIAbility',
657        deviceId: ''
658      }).then((obj) => {
659        caller = obj;
660        try {
661          caller.release();
662        } catch (releaseErr) {
663          console.log('Caller.release catch error, error.code: ${releaseErr.code}, error.message: ${releaseErr.message}');
664        }
665      }).catch((err: BusinessError) => {
666        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
667      });
668    }
669  }
670  ```
671
672## Caller.onRelease
673
674 onRelease(callback: OnReleaseCallback): void;
675
676注册通用组件服务端Stub(桩)断开监听通知。
677
678**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
679
680**错误码:**
681
682| 错误码ID | 错误信息 |
683| ------- | -------------------------------- |
684| 16200001 | Caller released. The caller has been released. |
685
686以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
687
688**参数:**
689
690| 参数名 | 类型 | 必填 | 说明 |
691| -------- | -------- | -------- | -------- |
692| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
693
694**示例:**
695
696  ```ts
697  import UIAbility from '@ohos.app.ability.UIAbility';
698  import { Caller } from '@ohos.app.ability.UIAbility';
699  import { BusinessError } from '@ohos.base';
700  import window from '@ohos.window';
701
702  let caller: Caller;
703  export default class MainUIAbility extends UIAbility {
704    onWindowStageCreate(windowStage: window.WindowStage) {
705      this.context.startAbilityByCall({
706        bundleName: 'com.example.myservice',
707        abilityName: 'MainUIAbility',
708        deviceId: ''
709      }).then((obj) => {
710          caller = obj;
711          try {
712            caller.onRelease((str) => {
713                console.log(' Caller OnRelease CallBack is called ${str}');
714            });
715          } catch (error) {
716            console.log('Caller.onRelease catch error, error.code: $error.code}, error.message: ${error.message}');
717          }
718      }).catch((err: BusinessError) => {
719        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
720      });
721    }
722  }
723  ```
724
725## Caller.onRemoteStateChange<sup>10+</sup>
726
727onRemoteStateChange(callback: OnRemoteStateChangeCallback): void;
728
729注册协同场景下跨设备组件状态变化监听通知。
730
731**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
732
733**参数:**
734
735| 参数名 | 类型 | 必填 | 说明 |
736| -------- | -------- | -------- | -------- |
737| callback | [OnRemoteStateChangeCallback](#onremotestatechangecallback) | 是 | 返回onRemoteStateChange回调结果。 |
738
739**错误码:**
740
741| 错误码ID | 错误信息 |
742| ------- | -------------------------------- |
743| 16200001 | Caller released. The caller has been released. |
744
745以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
746
747**示例:**
748
749  ```ts
750  import UIAbility from '@ohos.app.ability.UIAbility';
751  import { Caller } from '@ohos.app.ability.UIAbility';
752  import { BusinessError } from '@ohos.base';
753  import window from '@ohos.window';
754
755  let caller: Caller;
756  let dstDeviceId: string;
757  export default class MainAbility extends UIAbility {
758      onWindowStageCreate(windowStage: window.WindowStage) {
759          this.context.startAbilityByCall({
760              bundleName: 'com.example.myservice',
761              abilityName: 'MainUIAbility',
762              deviceId: dstDeviceId
763          }).then((obj) => {
764              caller = obj;
765              try {
766                  caller.onRemoteStateChange((str) => {
767                      console.log('Remote state changed ' + str);
768                  });
769              } catch (error) {
770                  console.log(`Caller.onRemoteStateChange catch error, error.code: ${JSON.stringify(error.code)}, error.message: ${JSON.stringify(error.message)}`);
771              }
772          }).catch((err: BusinessError) => {
773              console.log(`Caller GetCaller error, error.code: ${JSON.stringify(err.code)}, error.message: ${JSON.stringify(err.message)}`);
774          })
775      }
776  }
777  ```
778
779## Caller.on
780
781on(type: 'release', callback: OnReleaseCallback): void;
782
783注册通用组件服务端Stub(桩)断开监听通知。
784
785**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
786
787**参数:**
788
789| 参数名 | 类型 | 必填 | 说明 |
790| -------- | -------- | -------- | -------- |
791| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
792| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回onRelease回调结果。 |
793
794**错误码:**
795
796| 错误码ID | 错误信息 |
797| ------- | -------------------------------- |
798| 401 | If the input parameter is not valid parameter. |
799| 16200001 | Caller released. The caller has been released. |
800
801以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
802
803**示例:**
804
805  ```ts
806  import UIAbility from '@ohos.app.ability.UIAbility';
807  import { Caller } from '@ohos.app.ability.UIAbility';
808  import { BusinessError } from '@ohos.base';
809  import window from '@ohos.window';
810
811  let caller: Caller;
812  export default class MainUIAbility extends UIAbility {
813    onWindowStageCreate(windowStage: window.WindowStage) {
814      this.context.startAbilityByCall({
815        bundleName: 'com.example.myservice',
816        abilityName: 'MainUIAbility',
817        deviceId: ''
818      }).then((obj) => {
819          caller = obj;
820          try {
821            caller.on('release', (str) => {
822                console.log(' Caller OnRelease CallBack is called ${str}');
823            });
824          } catch (error) {
825            console.log('Caller.on catch error, error.code: ${error.code}, error.message: ${error.message}');
826          }
827      }).catch((err: BusinessError) => {
828        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
829      });
830    }
831  }
832  ```
833
834## Caller.off
835
836off(type: 'release', callback: OnReleaseCallback): void;
837
838取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。
839
840**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
841
842**参数:**
843
844| 参数名 | 类型 | 必填 | 说明 |
845| -------- | -------- | -------- | -------- |
846| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
847| callback | [OnReleaseCallback](#onreleasecallback) | 是 | 返回off回调结果。 |
848
849**错误码:**
850
851| 错误码ID | 错误信息 |
852| ------- | -------------------------------- |
853| 401 | If the input parameter is not valid parameter. |
854
855**示例:**
856
857  ```ts
858  import UIAbility, { OnReleaseCallback } from '@ohos.app.ability.UIAbility';
859  import { Caller } from '@ohos.app.ability.UIAbility';
860  import { BusinessError } from '@ohos.base';
861  import window from '@ohos.window';
862
863  let caller: Caller;
864  export default class MainUIAbility extends UIAbility {
865    onWindowStageCreate(windowStage: window.WindowStage) {
866      this.context.startAbilityByCall({
867        bundleName: 'com.example.myservice',
868        abilityName: 'MainUIAbility',
869        deviceId: ''
870      }).then((obj) => {
871          caller = obj;
872          try {
873            let onReleaseCallBack: OnReleaseCallback = (str) => {
874                console.log(' Caller OnRelease CallBack is called ${str}');
875            };
876            caller.on('release', onReleaseCallBack);
877            caller.off('release', onReleaseCallBack);
878          } catch (error) {
879            console.log('Caller.on or Caller.off catch error, error.code: ${error.code}, error.message: ${error.message}');
880          }
881      }).catch((err: BusinessError) => {
882        console.log('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
883      });
884    }
885  }
886  ```
887
888## Caller.off
889
890off(type: 'release'): void;
891
892取消注册通用组件服务端Stub(桩)断开监听通知。预留能力,当前暂未支持。
893
894**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
895
896**参数:**
897
898| 参数名 | 类型 | 必填 | 说明 |
899| -------- | -------- | -------- | -------- |
900| type | string | 是 | 监听releaseCall事件,固定为'release'。 |
901
902**示例:**
903
904  ```ts
905  import UIAbility, { OnReleaseCallback } from '@ohos.app.ability.UIAbility';
906  import { Caller } from '@ohos.app.ability.UIAbility';
907  import { BusinessError } from '@ohos.base';
908  import window from '@ohos.window';
909
910  let caller: Caller;
911  export default class MainUIAbility extends UIAbility {
912    onWindowStageCreate(windowStage: window.WindowStage) {
913      this.context.startAbilityByCall({
914        bundleName: 'com.example.myservice',
915        abilityName: 'MainUIAbility',
916        deviceId: ''
917      }).then((obj) => {
918          caller = obj;
919          try {
920            let onReleaseCallBack: OnReleaseCallback = (str) => {
921                console.log(' Caller OnRelease CallBack is called ${str}');
922            };
923            caller.on('release', onReleaseCallBack);
924            caller.off('release');
925          } catch (error) {
926            console.error('Caller.on or Caller.off catch error, error.code: ${error.code}, error.message: ${error.message}');
927          }
928      }).catch((err: BusinessError) => {
929        console.error('Caller GetCaller error, error.code: ${err.code}, error.message: ${err.message}');
930      });
931    }
932  }
933  ```
934
935## Callee
936
937通用组件服务端注册和解除客户端caller通知送信的callback接口。
938
939## Callee.on
940
941on(method: string, callback: CalleeCallback): void;
942
943通用组件服务端注册消息通知callback。
944
945**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
946
947**参数:**
948
949| 参数名 | 类型 | 必填 | 说明 |
950| -------- | -------- | -------- | -------- |
951| method | string | 是 | 与客户端约定的通知消息字符串。 |
952| callback | [CalleeCallback](#calleecallback) | 是 | 一个[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)类型入参的js通知同步回调函数,&nbsp;回调函数至少要返回一个空的[rpc.Parcelable](js-apis-rpc.md#parcelable9)数据对象,&nbsp;其他视为函数执行错误。 |
953
954**错误码:**
955
956| 错误码ID | 错误信息 |
957| ------- | -------------------------------- |
958| 16200004 | Method registered. The method has registered. |
959| 16000050 | Internal error. |
960
961以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
962
963**示例:**
964
965  ```ts
966  import UIAbility, { CalleeCallback } from '@ohos.app.ability.UIAbility';
967  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
968  import Want from '@ohos.app.ability.Want';
969  import rpc from '@ohos.rpc';
970
971  class MyMessageAble implements rpc.Parcelable {
972      name: string
973      str: string
974      num: number = 1
975      constructor(name: string, str: string) {
976        this.name = name;
977        this.str = str;
978      }
979      marshalling(messageSequence: rpc.MessageSequence) {
980          messageSequence.writeInt(this.num);
981          messageSequence.writeString(this.str);
982          console.log('MyMessageAble marshalling num[${this.num}] str[${this.str}]');
983          return true;
984      }
985      unmarshalling(messageSequence: rpc.MessageSequence) {
986          this.num = messageSequence.readInt();
987          this.str = messageSequence.readString();
988          console.log('MyMessageAble unmarshalling num[${this.num}] str[${this.str}]');
989          return true;
990      }
991  };
992  let method = 'call_Function';
993  function funcCallBack(pdata: rpc.MessageSequence) {
994      console.log('Callee funcCallBack is called ${pdata}');
995      let msg = new MyMessageAble('test', '');
996      pdata.readParcelable(msg);
997      return new MyMessageAble('test1', 'Callee test');
998  }
999  export default class MainUIAbility extends UIAbility {
1000    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
1001      console.log('Callee onCreate is called');
1002      try {
1003        this.callee.on(method, funcCallBack);
1004      } catch (error) {
1005        console.log('Callee.on catch error, error.code: ${error.code}, error.message: ${error.message}');
1006      }
1007    }
1008  }
1009  ```
1010
1011## Callee.off
1012
1013off(method: string): void;
1014
1015解除通用组件服务端注册消息通知callback。
1016
1017**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
1018
1019**参数:**
1020
1021| 参数名 | 类型 | 必填 | 说明 |
1022| -------- | -------- | -------- | -------- |
1023| method | string | 是 | 已注册的通知事件字符串。 |
1024
1025**错误码:**
1026
1027| 错误码ID | 错误信息 |
1028| ------- | -------------------------------- |
1029| 16200005 | Method not registered. The method has not registered. |
1030| 16000050 | Internal error. |
1031
1032以上错误码详细介绍请参考[errcode-ability](../errorcodes/errorcode-ability.md)。
1033
1034
1035**示例:**
1036
1037  ```ts
1038  import UIAbility from '@ohos.app.ability.UIAbility';
1039  import AbilityConstant from '@ohos.app.ability.AbilityConstant';
1040  import Want from '@ohos.app.ability.Want';
1041
1042  let method = 'call_Function';
1043  export default class MainUIAbility extends UIAbility {
1044    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
1045      console.log('Callee onCreate is called');
1046      try {
1047        this.callee.off(method);
1048      } catch (error) {
1049        console.log('Callee.off catch error, error.code: ${error.code}, error.message: ${error.message}');
1050      }
1051    }
1052  }
1053  ```
1054
1055## OnReleaseCallback
1056
1057(msg: string): void;
1058
1059**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
1060
1061| 名称 | 可读 | 可写 | 类型 | 说明 |
1062| -------- | -------- | -------- | -------- | -------- |
1063| (msg: string) | 是 | 否 | function | 调用者注册的侦听器函数接口的原型。 |
1064
1065## OnRemoteStateChangeCallback<sup>10+</sup>
1066
1067(msg: string): void;
1068
1069**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
1070
1071| 名称 | 可读 | 可写 | 类型 | 说明 |
1072| -------- | -------- | -------- | -------- | -------- |
1073| (msg: string) | 是 | 否 | function | 调用者注册的协同场景下组件状态变化监听函数接口的原型。 |
1074
1075## CalleeCallback
1076
1077(indata: rpc.MessageSequence): rpc.Parcelable;
1078
1079**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
1080
1081| 名称 | 可读 | 可写 | 类型 | 说明 |
1082| -------- | -------- | -------- | -------- | -------- |
1083| (indata: [rpc.MessageSequence](js-apis-rpc.md#messagesequence9)) | 是 | 否 | [rpc.Parcelable](js-apis-rpc.md#parcelable9) | 被调用方注册的消息侦听器函数接口的原型。 |
1084