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

这篇博客介绍了OHOS系统中EventHandler和EventRunner的概念及其在线程间通信中的应用。EventHandler用于将事件或任务投递到异步线程,而EventRunner则作为事件循环器,负责从事件队列中取出并处理事件。通过示例代码展示了如何在主线程和子线程间切换执行任务,实现高效的任务调度。
摘要由CSDN通过智能技术生成

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:回到主线程执行任务");
                    }
                });
            }
        });
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌狼蓝天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值