【HarmonyOS】【多线程与并发】EventHandler
EventHandler与EventRunner
EventHandler相关概念
● EventHandler是一种用户在当前线程上投递InnerEvent事件或者Runnable任务到异步线程上处理的机制;
● EventHandler需要配合EventRunner进行使用;
● EventRunner是一种事件循环器;
● 循环处理从该EventRunner创建的新线程的事件队列中获取InnerEvent事件或者Runnable任务(可运行任务);
EventHandler有两个主要作用:
● 在不同线程间分发和处理InnerEvent事件或Runnable任务;
● 延迟处理InnerEvent事件或Runnable任务;

使用EventHandler实现线程间通信的主要流程:
● EventHandler投递具体的InnerEvent事件或者Runnable任务到EventRunner所创建的线程的事件队列。
● EventRunner循环从事件队列中获取InnerEvent事件或者Runnable任务.
● 处理事件或任务:
—— 如果EventRunner取出的事件为InnerEvent事件,则触发EventHandler的回调方法并触发EventHandler的处理方法,在新线程上处理该事件。
—— 如果EventRunner取出的事件为Runnable任务,则EventRunner直接在新线程 上处理Runnable任务。
相关代码
线程类
import ohos.eventhandler.EventHandler;
import ohos.eventhandler.EventRunner; /*** 切换任务到主线程执行* @param runnable*/public static void runMain(Runnable runnable) {//切换到主线程EventRunner runner = EventRunner.getMainEventRunner();EventHandler eventHandler = new EventHandler(runner);//执行任务eventHandler.postSyncTask(runnable);} /*** 在子线程执行任务* @param runnable*/public static void runChild(Runnable runnable) {//开启一个新线程EventRunner runner = EventRunner.create(true);EventHandler eventHandler = new EventHandler(runner);//执行任务eventHandler.postTask(runnable,0,EventHandler.Priority.IMMEDIATE);} 使用
//MyExecutor 是线程类的类名
MyExecutor.runChild(new Runnable() {@Overridepublic void run() {System.out.println("----MyExecutor:在异步线程执行任务");MyExecutor.runMain(new Runnable() {@Overridepublic void run() {System.out.println("----MyExecutor:回到主线程执行任务");}});}});
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
