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