HarmonyOS Sample 之 EventHandler 线程间通信 原创 精华
目录
HarmonyOS Sample 之 EventHandler 线程间通信
1.介绍
在开发过程中,开发者经常需要在当前线程中处理下载任务等较为耗时的操作,但是又不希望当前的线程受到阻塞。
此时,就可以使用EventHandler机制。EventHandler是HarmonyOS用于处理线程间通信的一种机制,
可以通过EventRunner创建新线程,将耗时的操作放到新线程上执行。
这样既不阻塞原来的线程,任务又可以得到合理的处理。比如:
主线程使用EventHandler创建子线程,子线程做耗时的下载图片操作,下载完成后,子线程通过EventHandler通知主线程,主线程再更新UI。
2.搭建环境
安装DevEco Studio,详情请参考DevEco Studio下载。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
下载源码后,使用DevEco Studio 打开项目。
3.理论支持
EventRunner是一种事件循环器,循环处理队列中的 InnerEvent事件 或者 Runnable任务。
EventHandler是一种在 当前线程 上 投递 InnerEvent事件 或者 Runnable任务 到 异步线程上处理的机制。
InnerEvent是EventHandler投递的事件结构对象。
EventHandler和指定的EventRunner所创建的新线程绑定,并且该新线程内部有一个事件队列。
EventRunner的工作模式可以分为托管模式和手动模式。
投递时,EventHandler的优先级可在IMMEDIATE、HIGH、LOW、IDLE中选择。
详细请参考 线程间通信开发概述
使用EventHandler实现线程间通信的主要流程:
EventHandler投递具体的InnerEvent事件或者Runnable任务到EventRunner所创建的线程的事件队列。
EventRunner循环从事件队列中获取InnerEvent事件或者Runnable任务。
处理事件或任务:
如果EventRunner取出的事件为InnerEvent事件,
则触发EventHandler的回调方法并触发EventHandler的处理方法,在新线程上处理该事件。
如果EventRunner取出的事件为Runnable任务,则EventRunner直接 在新线程上处理Runnable任务。
4.实例讲解
4.1.UI界面
4.2.后台代码
4.2.1 初始化EventRunner、EventHandler 对象
4.2.2 发送普通事件
输出结果
4.2.3 发布可运行任务
输出结果
4.2.4 发送一个跨线程的事件
输出结果
4.2.5 继承事件处理器类,重写处理事件的方法
5.问题与思考
5.1 发布一个定时任务到队列,没有得到预期的效果。
5.2 思考一下 示例中 哪个地方体现了 “一个EventRunner可以同时绑定多个EventHandler” 这句话?
6.完整代码
附件直接下载
很棒,赞一个
谢谢支持!