zoukankan      html  css  js  c++  java
  • 鸿蒙线程间通信之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和华为合作共建的鸿蒙社区:harmonyos.51cto.com

  • 相关阅读:
    学习了一下调色理论
    几个同步软件
    慢性咽炎
    flash行情
    C#创建Windows服务
    .net下 foreach 与 for 的效率比较测试
    HTML服务器控件与Web服务器控件的区别
    c#遍历HashTable
    ASP.NET中Server与Request对象的方法
    .net内存回收与Dispose﹐Close﹐Finalize方法
  • 原文地址:https://www.cnblogs.com/HarmonyOS/p/14511794.html
Copyright © 2011-2022 走看看