前言
EventHandler是用于处理线程间通信的一种机制,可以通过EventRunner创建新线程,将耗时的操作放到新线程上执行。这样既不阻塞原来的线程,任务又可以得到合理的处理。比如:主线程使用EventHandler创建子线程,子线程做耗时的下载图片操作,下载完成后,子线程通过EventHandler通知主线程,主线程再更新UI。
基本概念
EventRunner是一种事件循环器,循环处理从该EventRunner创建的新线程的事件队列中获取InnerEvent事件。InnerEvent是EventHandler投递的事件。
EventHandler是一种用户在当前线程上投递InnerEvent事件到异步线程上处理的机制。每一个EventHandler和指定的EventRunner所创建的新线程绑定,并且该新线程内部有一个事件队列。EventHandler可以投递指定的InnerEvent事件到这个事件队列。EventRunner从事件队列里循环地取出事件,并在EventRunner所在线程执行processEvent回调。一般,EventHandler有两个主要作用:
-
在不同线程间分发和处理InnerEvent事件。
-
延迟处理InnerEvent事件。
运作机制
使用EventHandler实现线程间通信的主要流程:
-
EventHandler投递具体的InnerEvent事件到EventRunner所创建的线程的事件队列。
-
EventRunner循环从事件队列中获取InnerEvent事件。
-
新线程上处理该事件:触发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
进程内的事件。
名称 | 参数类型 |
---|