【HarmonyOS】【多线程与并发】EventHandler

EventHandler与EventRunner

EventHandler相关概念

● EventHandler是一种用户在当前线程上投递InnerEvent事件或者Runnable任务到异步线程上处理的机制;

● EventHandler需要配合EventRunner进行使用;

● EventRunner是一种事件循环器;

● 循环处理从该EventRunner创建的新线程的事件队列中获取InnerEvent事件或者Runnable任务(可运行任务);

EventHandler有两个主要作用:

● 在不同线程间分发和处理InnerEvent事件或Runnable任务;

● 延迟处理InnerEvent事件或Runnable任务;

image.png

使用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:回到主线程执行任务");
                    }
                });
            }
        });
posted @ 2021-12-10 09:25  萌狼蓝天  阅读(254)  评论(0编辑  收藏  举报