【鸿蒙南向开发】OpenHarmony——EventHandler源码解析

前言

EventHandler是用于处理线程间通信的一种机制,可以通过EventRunner创建新线程,将耗时的操作放到新线程上执行。这样既不阻塞原来的线程,任务又可以得到合理的处理。比如:主线程使用EventHandler创建子线程,子线程做耗时的下载图片操作,下载完成后,子线程通过EventHandler通知主线程,主线程再更新UI。

基本概念

EventRunner是一种事件循环器,循环处理从该EventRunner创建的新线程的事件队列中获取InnerEvent事件。InnerEvent是EventHandler投递的事件。

EventHandler是一种用户在当前线程上投递InnerEvent事件到异步线程上处理的机制。每一个EventHandler和指定的EventRunner所创建的新线程绑定,并且该新线程内部有一个事件队列。EventHandler可以投递指定的InnerEvent事件到这个事件队列。EventRunner从事件队列里循环地取出事件,并在EventRunner所在线程执行processEvent回调。一般,EventHandler有两个主要作用:

  • 在不同线程间分发和处理InnerEvent事件。

  • 延迟处理InnerEvent事件。

运作机制

image.png

使用EventHandler实现线程间通信的主要流程:

  1. EventHandler投递具体的InnerEvent事件到EventRunner所创建的线程的事件队列。

  2. EventRunner循环从事件队列中获取InnerEvent事件。

  3. 新线程上处理该事件:触发InnerEvent的回调方法并触发EventHandler的处理方法。

接口说明

ohos.events.emitter(Emitter)

接口名 描述
on(event: InnerEvent, callback: Callback) 持续订阅某个事件以及接收事件的回调处理。
once(event: InnerEvent, callback: Callback) 单次订阅某个事件以及接收事件的回调处理,接收到回调处理后自动取消订阅。
off(eventId: number) 取消订阅某个事件。
emit(event: InnerEvent, data?: EventData) 发送一个事件到事件队列。

InnerEvent

进程内的事件。

名称 参数类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值