1# @ohos.events.emitter (Emitter) 2 3本模块提供了在同一进程不同线程间,或同一进程同一线程内,发送和处理事件的能力,包括持续订阅事件、单次订阅事件、取消订阅事件,以及发送事件到事件队列的能力。 4 5> **说明:** 6> 7> 本模块首批接口从API version 7开始支持。后续版本新增接口,采用上角标单独标记接口的起始版本。 8 9## 导入模块 10 11```ts 12import { emitter } from '@kit.BasicServicesKit'; 13``` 14 15## 权限列表 16 17无权限要求。 18 19## emitter.on 20 21on(event: InnerEvent, callback: Callback\<EventData\>): void 22 23持续订阅指定的事件,并在接收到该事件时,执行对应的回调处理函数。 24 25**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 26 27**系统能力**: `SystemCapability.Notification.Emitter` 28 29**参数:** 30 31| 参数名 | 类型 | 必填 | 说明 | 32| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 33| event | [InnerEvent](#innerevent) | 是 | 持续订阅的事件,其中[EventPriority](#eventpriority),在订阅事件时无需指定,也不生效。 | 34| callback | Callback\<[EventData](#eventdata)\> | 是 | 接收到该事件时需要执行的回调处理函数。 | 35 36**示例:** 37 38```ts 39let innerEvent: emitter.InnerEvent = { 40 eventId: 1 41}; 42 43// 收到eventId为1的事件后执行回调函数 44emitter.on(innerEvent, () => { 45 console.info('callback'); 46}); 47``` 48 49## emitter.on<sup>11+</sup> 50 51on(eventId: string, callback: Callback\<EventData\>): void 52 53持续订阅指定事件,并在接收到该事件时,执行对应的回调处理函数。 54 55**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 56 57**系统能力**: `SystemCapability.Notification.Emitter` 58 59**参数:** 60 61| 参数名 | 类型 | 必填 | 说明 | 62| -------- | ----------------------------------- | ---- | -------------------------------------- | 63| eventId | string | 是 | 持续订阅的事件。长度不超过10240字节的自定义字符串,且不可为空字符。 | 64| callback | Callback\<[EventData](#eventdata)\> | 是 | 接收到该事件时需要执行的回调处理函数。 | 65 66**示例:** 67 68```ts 69// 收到eventId为"eventId"的事件后执行回调函数 70emitter.on("eventId", () => { 71 console.info('callback'); 72}); 73``` 74 75## emitter.on<sup>12+</sup> 76 77on<T\>(eventId: string, callback: Callback\<GenericEventData<T\>\>): void 78 79持续订阅指定事件,并在接收到该事件时,执行对应的回调处理函数。 80 81**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 82 83**系统能力**: `SystemCapability.Notification.Emitter` 84 85**参数:** 86 87| 参数名 | 类型 | 必填 | 说明 | 88| -------- | ----------------------------------- | ---- | -------------------------------------- | 89| eventId | string | 是 | 持续订阅的事件。长度不超过10240字节的自定义字符串,且不可为空字符。 | 90| callback | Callback\<[GenericEventData<T\>](#genericeventdatat12)\> | 是 | 接收到该事件时需要执行的回调处理函数。 | 91 92**示例:** 93 94```ts 95@Sendable 96class Sample { 97 constructor() { 98 this.count = 100; 99 } 100 printCount() { 101 console.info('Print count : ' + this.count); 102 } 103 count: number; 104} 105 106let callback = (eventData: emitter.GenericEventData<Sample>): void => { 107 let storage: Sample = eventData.data!; 108 storage.printCount(); 109} 110// 收到eventId为"eventId"的事件后执行回调函数 111emitter.on("eventId", callback); 112``` 113 114## emitter.once 115 116once(event: InnerEvent, callback: Callback\<EventData\>): void 117 118单次订阅指定的事件,并在接收到该事件并执行完相应的回调函数后,自动取消订阅。 119 120**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 121 122**系统能力**: `SystemCapability.Notification.Emitter` 123 124**参数:** 125 126| 参数名 | 类型 | 必填 | 说明 | 127| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 128| event | [InnerEvent](#innerevent) | 是 | 单次订阅的事件,其中[EventPriority](#eventpriority),在订阅事件时无需指定,也不生效。 | 129| callback | Callback\<[EventData](#eventdata)\> | 是 | 接收到该事件时需要执行的回调处理函数。 | 130 131**示例:** 132 133```ts 134let innerEvent: emitter.InnerEvent = { 135 eventId: 1 136}; 137 138// 收到eventId为1的事件后执行该回调函数 139emitter.once(innerEvent, () => { 140 console.info('once callback'); 141}); 142``` 143 144## emitter.once<sup>11+</sup> 145 146once(eventId: string, callback: Callback\<EventData\>): void 147 148单次订阅指定事件,并在接收到该事件并执行完相应的回调函数后,自动取消订阅。 149 150**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 151 152**系统能力**: `SystemCapability.Notification.Emitter` 153 154**参数:** 155 156| 参数名 | 类型 | 必填 | 说明 | 157| -------- | ----------------------------------- | ---- | -------------------------------------- | 158| eventId | string | 是 | 单次订阅的事件。长度不超过10240字节的自定义字符串,且不可为空字符。 | 159| callback | Callback\<[EventData](#eventdata)\> | 是 | 接收到该事件时需要执行的回调处理函数。 | 160 161**示例:** 162 163```ts 164// 收到eventId为"eventId"的事件后执行该回调函数 165emitter.once("eventId", () => { 166 console.info('once callback'); 167}); 168``` 169 170## emitter.once<sup>12+</sup> 171 172once<T\>(eventId: string, callback: Callback\<GenericEventData<T\>\>): void 173 174单次订阅指定事件,并在接收到该事件并执行完相应的回调函数后,自动取消订阅。 175 176**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 177 178**系统能力**: `SystemCapability.Notification.Emitter` 179 180**参数:** 181 182| 参数名 | 类型 | 必填 | 说明 | 183| -------- | ----------------------------------- | ---- | -------------------------------------- | 184| eventId | string | 是 | 单次订阅的事件。长度不超过10240字节的自定义字符串,且不可为空字符。 | 185| callback | Callback\<[GenericEventData<T\>](#genericeventdatat12)\> | 是 | 接收到该事件时需要执行的回调处理函数。 | 186 187**示例:** 188 189```ts 190@Sendable 191class Sample { 192 constructor() { 193 this.count = 100; 194 } 195 printCount() { 196 console.info('Print count : ' + this.count); 197 } 198 count: number; 199} 200 201let callback = (eventData: emitter.GenericEventData<Sample>): void => { 202 let storage: Sample = eventData.data!; 203 storage.printCount(); 204} 205// 收到eventId为"eventId"的事件后执行回调函数 206emitter.once("eventId", callback); 207``` 208 209## emitter.off 210 211off(eventId: number): void 212 213取消针对该事件ID的订阅。 214 215**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 216 217**系统能力**: `SystemCapability.Notification.Emitter` 218 219**参数:** 220 221| 参数名 | 类型 | 必填 | 说明 | 222| ------- | ------ | ---- | -------- | 223| eventId | number | 是 | 事件ID。 | 224 225**示例:** 226 227```ts 228// 取消eventID为1的所有事件回调处理函数 229emitter.off(1); 230``` 231 232## emitter.off<sup>11+</sup> 233 234off(eventId: string): void 235 236取消订阅指定事件。 237 238**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 239 240**系统能力**: `SystemCapability.Notification.Emitter` 241 242**参数:** 243 244| 参数名 | 类型 | 必填 | 说明 | 245| ------- | ------ | ---- | -------- | 246| eventId | string | 是 | 事件ID。长度不超过10240字节的自定义字符串,且不可为空字符 | 247 248**示例:** 249 250```ts 251// 取消eventID为"eventId"的所有事件回调处理函数 252emitter.off("eventId"); 253``` 254 255## emitter.off<sup>10+</sup> 256 257off(eventId: number, callback: Callback\<EventData\>): void 258 259取消针对该事件ID的订阅,传入可选参数Callback\<EventData\>,并且该Callback\<EventData\>已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。 260 261**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 262 263**系统能力**: `SystemCapability.Notification.Emitter` 264 265**参数:** 266 267| 参数名 | 类型 | 必填 | 说明 | 268| ------- | ------ | ---- | ------ | 269| eventId | number | 是 | 事件ID。 | 270| callback | Callback\<[EventData](#eventdata)\> | 是 |取消该事件的回调处理函数。 | 271 272**示例:** 273 274```ts 275// 取消eventID为1的事件回调处理函数 276// 如果该回调处理函数没有被订阅,则不做任何处理 277emitter.off(1, () => { 278 console.info('callback'); 279}); 280``` 281 282## emitter.off<sup>11+</sup> 283 284off(eventId: string, callback: Callback\<EventData\>): void 285 286取消针对该事件ID的订阅,传入可选参数Callback\<EventData\>,并且该Callback\<EventData\>已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。 287 288**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 289 290**系统能力**: `SystemCapability.Notification.Emitter` 291 292**参数:** 293 294| 参数名 | 类型 | 必填 | 说明 | 295| -------- | ----------------------------------- | ---- | -------------------------- | 296| eventId | string | 是 | 事件ID。长度不超过10240字节的自定义字符串,且不可为空字符。 | 297| callback | Callback\<[EventData](#eventdata)\> | 是 | 取消该事件的回调处理函数。 | 298 299**示例:** 300 301```ts 302// 取消eventID为"eventId"的事件回调处理函数 303// 如果该回调处理函数没有被订阅,则不做任何处理 304emitter.off("eventId", () => { 305 console.info('callback'); 306}); 307``` 308 309## emitter.off<sup>12+</sup> 310 311off<T\>(eventId: string, callback: Callback\<GenericEventData<T\>\>): void 312 313取消针对该事件ID的订阅,传入可选参数Callback\<GenericEventData<T\>\>,如果该Callback\<GenericEventData<T\>\>已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。 314 315**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 316 317**系统能力**: `SystemCapability.Notification.Emitter` 318 319**参数:** 320 321| 参数名 | 类型 | 必填 | 说明 | 322| -------- | ----------------------------------- | ---- | -------------------------- | 323| eventId | string | 是 | 事件ID。长度不超过10240字节的自定义字符串,且不可为空字符。 | 324| callback | Callback\<[GenericEventData<T\>](#genericeventdatat12)\> | 是 | 取消该事件的回调处理函数。 | 325 326**示例:** 327 328```ts 329@Sendable 330class Sample { 331 constructor() { 332 this.count = 100; 333 } 334 printCount() { 335 console.info('Print count : ' + this.count); 336 } 337 count: number; 338} 339 340let callback = (eventData: emitter.GenericEventData<Sample>): void => { 341 let storage: Sample = eventData.data!; 342 storage.printCount(); 343} 344// 取消eventID为"eventId"的事件回调处理函数 345// 如果该回调处理函数没有被订阅,则不做任何处理 346emitter.off("eventId", callback); 347``` 348 349## emitter.emit 350 351emit(event: InnerEvent, data?: EventData): void 352 353发送指定的事件。 354 355**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 356 357**系统能力**: `SystemCapability.Notification.Emitter` 358 359**参数:** 360 361| 参数名 | 类型 | 必填 | 说明 | 362| ------ | ------------------------- | ---- | ------------- | 363| event | [InnerEvent](#innerevent) | 是 | 发送的事件,其中[EventPriority](#eventpriority)用于指定事件被发送的优先级。 | 364| data | [EventData](#eventdata) | 否 | 事件携带的数据。 | 365 366**示例:** 367 368```ts 369let eventData: emitter.EventData = { 370 data: { 371 "content": "content", 372 "id": 1, 373 } 374}; 375 376let innerEvent: emitter.InnerEvent = { 377 eventId: 1, 378 priority: emitter.EventPriority.HIGH 379}; 380 381emitter.emit(innerEvent, eventData); 382``` 383 384## emitter.emit<sup>11+</sup> 385 386emit(eventId: string, data?: EventData): void 387 388发送指定事件。 389 390**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 391 392**系统能力**: `SystemCapability.Notification.Emitter` 393 394**参数:** 395 396| 参数名 | 类型 | 必填 | 说明 | 397| ------- | ----------------------- | ---- | ---------------- | 398| eventId | string | 是 | 发送的事件ID。长度不超过10240字节的自定义字符串,且不可为空字符。 | 399| data | [EventData](#eventdata) | 否 | 事件携带的数据。 | 400 401**示例:** 402 403```ts 404let eventData: emitter.EventData = { 405 data: { 406 "content": "content", 407 "id": 1, 408 } 409}; 410 411emitter.emit("eventId", eventData); 412``` 413 414## emitter.emit<sup>12+</sup> 415 416emit<T\>(eventId: string, data?: GenericEventData<T\>): void 417 418发送指定事件。 419 420**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 421 422**系统能力**: `SystemCapability.Notification.Emitter` 423 424**参数:** 425 426| 参数名 | 类型 | 必填 | 说明 | 427| ------- | ----------------------- | ---- | ---------------- | 428| eventId | string | 是 | 发送的事件ID。长度不超过10240字节的自定义字符串,且不可为空字符。 | 429| data | [GenericEventData<T\>](#genericeventdatat12) | 否 | 事件携带的数据。 | 430 431**示例:** 432 433```ts 434@Sendable 435class Sample { 436 constructor() { 437 this.count = 100; 438 } 439 printCount() { 440 console.info('Print count : ' + this.count); 441 } 442 count: number; 443} 444 445class SelfEventData implements emitter.EventData { 446 data: Sample = new Sample(); 447} 448 449let eventData = new SelfEventData(); 450emitter.emit("eventId", eventData); 451``` 452 453## emitter.emit<sup>11+</sup> 454 455emit(eventId: string, options: Options, data?: EventData): void 456 457发送指定优先级事件。 458 459**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 460 461**系统能力**: `SystemCapability.Notification.Emitter` 462 463**参数:** 464 465| 参数名 | 类型 | 必填 | 说明 | 466| ------- | ----------------------- | ---- | ---------------- | 467| eventId | string | 是 | 发送的事件ID。长度不超过10240字节的自定义字符串,且不可为空字符。 | 468| options | [Options](#options11) | 是 | 事件优先级。 | 469| data | [EventData](#eventdata) | 否 | 事件携带的数据。 | 470 471**示例:** 472 473```ts 474let eventData: emitter.EventData = { 475 data: { 476 "content": "content", 477 "id": 1, 478 } 479}; 480 481let options: emitter.Options = { 482 priority: emitter.EventPriority.HIGH 483}; 484 485emitter.emit("eventId", options, eventData); 486``` 487 488## emitter.emit<sup>12+</sup> 489 490emit<T\>(eventId: string, options: Options, data?: GenericEventData<T\>): void 491 492发送指定优先级事件。 493 494**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 495 496**系统能力**: `SystemCapability.Notification.Emitter` 497 498**参数:** 499 500| 参数名 | 类型 | 必填 | 说明 | 501| ------- | ----------------------- | ---- | ---------------- | 502| eventId | string | 是 | 发送的事件ID。长度不超过10240字节的自定义字符串,且不可为空字符。 | 503| options | [Options](#options11) | 是 | 事件优先级。 | 504| data | [GenericEventData<T\>](#genericeventdatat12) | 否 | 事件携带的数据。 | 505 506**示例:** 507 508```ts 509@Sendable 510class Sample { 511 constructor() { 512 this.count = 100; 513 } 514 printCount() { 515 console.info('Print count : ' + this.count); 516 } 517 count: number; 518} 519 520class SelfEventData implements emitter.EventData { 521 data: Sample = new Sample(); 522} 523 524let options: emitter.Options = { 525 priority: emitter.EventPriority.HIGH 526}; 527 528let eventData = new SelfEventData(); 529emitter.emit("eventId", options, eventData); 530``` 531 532## emitter.getListenerCount<sup>11+</sup> 533 534getListenerCount(eventId: number | string): number 535 536获取指定事件的订阅数。 537 538**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 539 540**系统能力**: `SystemCapability.Notification.Emitter` 541 542**参数:** 543 544| 参数名 | 类型 | 必填 | 说明 | 545| ------- | -------------- | ---- | -------- | 546| eventId | number \| string | 是 | 事件ID,string类型的eventId不支持空字符串。 | 547 548**示例:** 549 550```ts 551let count = emitter.getListenerCount("eventId"); 552``` 553 554## EventPriority 555 556用于表示事件被发送的优先级。 557 558**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 559 560**系统能力**: `SystemCapability.Notification.Emitter` 561 562| 名称 | 值 | 说明 | 563| --------- | ---- | --------------------------------------------------- | 564| IMMEDIATE | 0 | 表示事件被立即投递。 | 565| HIGH | 1 | 表示事件先于LOW优先级投递。 | 566| LOW | 2 | 表示事件优于IDLE优先级投递,事件的默认优先级是LOW。 | 567| IDLE | 3 | 表示在没有其他事件的情况下,才投递该事件。 | 568 569## InnerEvent 570 571订阅或发送的事件,订阅事件时`EventPriority`不生效。 572 573**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 574 575**系统能力**: `SystemCapability.Notification.Emitter` 576 577| 名称 | 类型 | 只读 | 可选 | 说明 | 578| -------- | ------------------------------- | ---- | ---- | ------------------------------ | 579| eventId | number | 否 | 否 | 事件ID,由开发者定义用来辨别事件。 | 580| priority | [EventPriority](#eventpriority) | 否 | 是 | 事件被投递的优先级。 | 581 582## EventData 583 584发送事件时传递的数据。 585 586**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 587 588**系统能力**: `SystemCapability.Notification.Emitter` 589 590| 名称 | 类型 | 只读 | 可选 | 说明 | 591| ---- | ------------------ | ---- | ---- | -------------- | 592| data | { [key: string]: any } | 否 | 是 | 发送事件时传递的数据,支持数据类型包括Array、ArrayBuffer、Boolean、DataView、Date、Error、Map、Number、Object、Primitive(除了symbol)、RegExp、Set、String、TypedArray,数据大小最大为16M。 | 593 594## Options<sup>11+</sup> 595 596发送事件的优先级。 597 598**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 599 600**系统能力**: `SystemCapability.Notification.Emitter` 601 602| 名称 | 类型 | 只读 | 可选 | 说明 | 603| -------- | ------------------------------- | ---- | ---- | -------------- | 604| priority | [EventPriority](#eventpriority) | 否 | 是 | 事件的优先级。 | 605 606## GenericEventData<T\><sup>12+</sup> 607 608发送事件时传递的泛型数据。 609 610**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 611 612**系统能力**: `SystemCapability.Notification.Emitter` 613 614| 名称 | 类型 | 只读 | 可选 | 说明 | 615| -------- | ------------------------------- | ---- | ---- | -------------- | 616| data | T | 否 | 是 | 发送事件时传递的数据。T:泛型类型。 | 617 618