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() { @Override public void run() { System.out.println("----MyExecutor:在异步线程执行任务"); MyExecutor.runMain(new Runnable() { @Override public void run() { System.out.println("----MyExecutor:回到主线程执行任务"); } }); } });