鸿蒙线程间通讯之EventHandler

目录:安全

1、HarmonyOS中EventHandler实现效果异步

2、Handler的定义和机制ide

3、HarmonyOS中EventHandler的实现post

4、参考资料ui

5、附件下载url

 

1、HarmonyOS中EventHandler实现效果.net

鸿蒙线程间通讯之EventHandler

 

2、Handler的定义和机制线程

Android中Handler对象

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

描述:当应用程序启动时,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

3、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。

 

4、参考资料:

线程间通讯开发指导

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/inter-thread-guidelines-0000000000038955

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

 

做者:AnBetter2021

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

相关文章
相关标签/搜索