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: string]: 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<void>; 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<void> | 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<rpc.MessageSequence>; 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<[rpc.MessageSequence](js-apis-rpc.md#messagesequence9)> | 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通知同步回调函数, 回调函数至少要返回一个空的[rpc.Parcelable](js-apis-rpc.md#parcelable9)数据对象, 其他视为函数执行错误。 | 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