HarmonyOS技术社区 · 2021年03月10日

鸿蒙线程间通信之EventHandler

目录:
一、HarmonyOS中EventHandler实现效果
二、Handler的定义和机制
三、HarmonyOS中EventHandler的实现
四、参考资料
五、附件下载

一、HarmonyOS中EventHandler实现效果

鸿蒙线程间通信之EventHandler

二、Handler的定义和机制

Android中Handler

主要接受子线程发送的数据, 并用此数据配合主线程更新UI。

描述:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发,
比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。 如果此时需要一个耗时的操作,例如:
联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,
如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭"。
这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的,
也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。 这个时候,Handler就出现了。,来解决这个复杂的问题
,由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据,
这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) ,
把这些消息放入主线程队列中,配合主线程进行更新UI。
鸿蒙线程间通信之EventHandler

HarmonyOS中EventHandler

在开发过程中,开发者经常需要在当前线程中处理下载任务等较为耗时的操作,但是又不希望当前的线程受到阻塞。此时,就可以使用EventHandler机制。EventHandler是HarmonyOS用于处理线程间通信的一种机制,可以通过EventRunner创建新线程,将耗时的操作放到新线程上执行。这样既不阻塞原来的线程,任务又可以得到合理的处理。比如:主线程使用EventHandler创建子线程,子线程做耗时的下载图片操作,下载完成后,子线程通过EventHandler通知主线程,主线程再更新UI。

描述:EventRunner是一种事件循环器,循环处理从该EventRunner创建的新线程的事件队列中获取InnerEvent事件或者Runnable任务。InnerEvent是EventHandler投递的事件。EventHandler是一种用户在当前线程上投递InnerEvent事件或者Runnable任务到异步线程上处理的机制。每一个EventHandler和指定的EventRunner所创建的新线程绑定,并且该新线程内部有一个事件队列。EventHandler可以投递指定的InnerEvent事件或Runnable任务到这个事件队列。EventRunner从事件队列里循环地取出事件,如果取出的事件是InnerEvent事件,将在EventRunner所在线程执行processEvent回调;如果取出的事件是Runnable任务,将在EventRunner所在线程执行Runnable的run回调。

鸿蒙线程间通信之EventHandler

三、HarmonyOS中EventHandler的实现

-EventHandler使用来线程间通信的,创建EventHandler必须要先创建EventRunner,EventRunner.current()获取主线程即UI线程

  //获取当前主线程的EventRunner,用来存放事件队列,
  EventRunner eventRunner=EventRunner.current();

-在进行线程间通信的时候,EventHandler只能和EventRunner所创建的线程进行绑定,EventRunner创建时需要判断是否创建成功,只有确保获取的EventRunner实例非空时,才可以使用EventHandler绑定EventRunner。

  //handler必须绑定eventrunner
  EventHandler handler=new EventHandler(eventRunner);

-一个EventHandler只能同时与一个EventRunner绑定,一个EventRunner上可以创建多个EventHandler。

四、参考资料:

线程间通信开发指导
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/inter-thread-guidelines-0000000000038955

抛砖引玉,不足之处,还请各位老师多多指教。

作者:AnBetter2021
想了解更多内容,请访问51CTO和华为合作共建的鸿蒙社区:https://harmonyos.51cto.com/

21_9.jpg

推荐阅读
关注数
3019
内容数
446
华为鸿蒙相关技术,活动及资讯,欢迎关注及加入创作
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息