当前位置:   article > 正文

鸿蒙harmony--线程间处理和发送事件Emitter_ohos.events.emitter

ohos.events.emitter

想的太多生活中就全是问题,可当你开始行动,这些问题其实都是有答案的,解决焦虑的最好方式,就是把所有的问题都落实到行动上,当你真正开始行动起来,你就会发现这些问题,其实都不是问题!

目录

一,定义

二,主要API

2.1EventPriority

2.2 emitter.on

 2.3 emitter.once

2.4 emitter.off

2.5 emitter.emit

2.6 InnerEvent

2.7 EventData 

三,使用

一,定义

类似于android中的EventBus线程间发送事件和处理事件,鸿蒙采用了Emitter来提供线程间发送和处理事件的能力,包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。

二,主要API

2.1EventPriority

用于表示事件被发送的优先级。

系统能力SystemCapability.Notification.Emitter

名称说明
IMMEDIATE0表示事件被立即投递。
HIGH1表示事件先于LOW优先级投递。
LOW2表示事件优于IDLE优先级投递,事件的默认优先级是LOW。
IDLE3表示在没有其他事件的情况下,才投递该事件。

2.2 emitter.on

on(event: InnerEvent, callback: Callback<EventData>): void

持续订阅指定的事件,并在接收到该事件时,执行对应的回调处理函数。

参数:

参数名类型必填说明
eventInnerEvent持续订阅的事件,其中EventPriority,在订阅事件时无需指定,也不生效
callbackCallback<EventData>接收到该事件时需要执行的回调处理函数

 2.3 emitter.once

once(event: InnerEvent, callback: Callback<EventData>): void

单次订阅指定的事件,并在接收到该事件并执行完相应的回调函数后,自动取消订阅。

参数:

参数名类型必填说明
eventInnerEvent单次订阅的事件,其中

EventPriority ,在订阅事件时无需指定,也不生效

callbackCallback<EventData>接收到该事件时需要执行的回调处理函数

2.4 emitter.off

off(eventId: number, callback: Callback<EventData>): void

取消针对该事件ID的订阅,传入可选参数callback,并且该callback已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。

参数:

参数名类型必填说明
eventIdnumber事件ID
callback10+Callback<EventData>API version 10 新增取消该事件的回调处理函数。

2.5 emitter.emit

emit(event: InnerEvent, data?: EventData): void

发送指定的事件。

参数:

参数名类型必填说明
event​​​​​​​InnerEvent发送的事件,其中EventPriority用于指定事件被发送的优先级
dataEventData事件携带的数据

2.6 InnerEvent

订阅或发送的事件,订阅事件时EventPriority不生效。

名称类型可读可写说明
eventIdnumber事件ID,由开发者定义用来辨别事件。
priorityEventPriority事件被投递的优先级。

2.7 EventData 

发送事件时传递的数据。

名称类型可读可写说明
data[key: string]: any发送事件时传递的数据,数据类型支持字符串、整型和布尔型。
其中字符串长度最大为10240字节。

三,使用

 ①简单封装一个EventBus单例:

  1. import emitter from '@ohos.events.emitter'
  2. export default class EventBus{
  3. private static instace: EventBus
  4. private constructor() {
  5. }
  6. static getInstance(): EventBus {
  7. if (!EventBus.instace) {
  8. EventBus.instace = new EventBus()
  9. }
  10. return EventBus.instace
  11. }
  12. //持续订阅指定的事件,并在接收到该事件时,执行对应的回调处理函数。
  13. on(name:number,callback:(eventData:emitter.EventData)=>void){
  14. let event :emitter.InnerEvent={
  15. eventId:name, //事件ID
  16. priority:emitter.EventPriority.IMMEDIATE //事件立即被投递
  17. }
  18. emitter.on(event,callback)
  19. }
  20. //取消针对该事件ID的订阅,传入可选参数callback,并且该callback已经通过on或者once接口订阅,则取消该订阅;否则,不做任何处理。
  21. unregister(name:number){
  22. emitter.off(name)
  23. }
  24. //发送指定的事件
  25. post(name:number,data?:emitter.EventData){
  26. let event :emitter.InnerEvent={
  27. eventId:name, //事件ID
  28. priority:emitter.EventPriority.IMMEDIATE //事件立即被投递
  29. }
  30. let eventdata: emitter.EventData = {
  31. data:data
  32. }
  33. emitter.emit(event,eventdata)
  34. }
  35. }

②,定义事件id

  1. export enum AppEvent{
  2. EVENT_TEST = 1,
  3. EVENT_TEST2 = 2,
  4. EVENT_TEST3 = 3,
  5. }

③发送事件

  1. import EventBus from './EventBus'
  2. import { AppEvent } from './AppEvent'
  3. import emitter from '@ohos.events.emitter'
  4. @Entry
  5. @Component
  6. struct SecondPage {
  7. build() {
  8. Column() {
  9. Text("第二页").onClick(()=>{
  10. let data:emitter.EventData ={data:{
  11. name:"袁震",
  12. }}
  13. EventBus.getInstance().post(AppEvent.EVENT_TEST,data)
  14. })
  15. }.width("100%").height("100%")
  16. }
  17. }

④,订阅事件,解绑事件

  1. import { AppEvent } from './AppEvent'
  2. import EventBus from './EventBus'
  3. @Entry
  4. @Component
  5. struct FirstPage {
  6. aboutToAppear(){
  7. EventBus.getInstance().on(AppEvent.EVENT_TEST,(data)=>{
  8. console.info("yz----data:"+data.data)
  9. })
  10. }
  11. aboutToDisappear(){
  12. EventBus.getInstance().unregister(AppEvent.EVENT_TEST)
  13. }
  14. build() {
  15. Flex({direction: FlexDirection.Row,wrap: FlexWrap.Wrap}) {
  16. Text('袁震1').flexBasis('auto').width('25%').height(50).backgroundColor("#D2d28C")
  17. Text('袁震2').flexBasis(100).height(60).backgroundColor("#554433")
  18. Text('袁震3').flexBasis(200).width('35%').height(70).backgroundColor("#668888")
  19. Text('袁震3').width('40%').height(70).backgroundColor("#6688cc").flexBasis('60%')
  20. Text('袁震3').width('45%').height(70).backgroundColor("#668822").flexBasis('70%')
  21. Text('袁震3').width('50%').height(70).backgroundColor("#668866").flexBasis('80%')
  22. }.width("100%").height("100%")
  23. }
  24. }

使用很简单,和android框架EventBus也是非常相似

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/227771
推荐阅读
相关标签
  

闽ICP备14008679号