鸿蒙开发笔记--TaskDispatcher

鸿蒙开发中多线程任务,是通过TaskDispatcher类来进行分发的。其中包括四种分发器:GlobalTaskDispatcher、ParallelTaskDispatcher、SerialTaskDispatcher、SpecTaskDispatcher。

  • GlobalTaskDispatcher
    全局并发任务分发器,一个应用只有一个实例,由Ability.getGlobalTaskDispatcher()获取。适用于任务之间没有联系的情况。
  • ParallelTaskDispatcher
    并发任务分发器,由Ability.createParallelTaskDispatcher()生成。与GlobalTaskDispatcher不同的是,ParallelTaskDispatcher不具有全局唯一性,可以创建多个。在创建或销毁dispatcher时,需要持有对应的对象引用。
  • SerialTaskDispatcher
    串行任务分发器,由Ability.createSerialTaskDispatcher()创建并返回。由该分发器分发的所有的任务都是按顺序执行,但是执行这些任务的线程并不是固定的。如果要执行并行任务,应使用ParallelTaskDispatcher或者GlobalTaskDispatcher,而不是创建多个SerialTaskDispatcher。如果任务之间没有依赖,应使用GlobalTaskDispatcher来实现。它的创建和销毁由开发者自己管理,开发者在使用期间需要持有该对象引用。
  • SpecTaskDispatcher
    专有任务分发器,绑定到专有线程上的任务分发器。目前已有的专有线程是主线程。UITaskDispatcher和MainTaskDispatcher都属于SpecTaskDispatcher。建议使用UITaskDispatcher。
    UITaskDispatcher:绑定到应用主线程的专有任务分发器, 由Ability.getUITaskDispatcher()创建并返回。 由该分发器分发的所有的任务都是在主线程上按顺序执行,它在应用程序结束时被销毁。

EventHandler
EventHandler是一种用户在当前线程上投递InnerEvent事件或者Runnable任务到异步线程上处理的机制。每一个EventHandler和指定的EventRunner所创建的新线程绑定,并且该新线程内部有一个事件队列。EventHandler可以投递指定的InnerEvent事件或Runnable任务到这个事件队列。EventRunner从事件队列里循环地取出事件,如果取出的事件是InnerEvent事件,将在EventRunner所在线程执行processEvent回调;如果取出的事件是Runnable任务,将在EventRunner所在线程执行Runnable的run回调。

总结:

1.TaskDispatcher是HarmonyOS中的多线程管理框架,通过适用它可以快速实现多任务耗时操作,而无需自己创建线程。
2.EventHandler是HarmonyOS中用于线程间通信的一种机制,类似于Android中的Handler。一个EventHandler只能和一个Eventrunner绑定,而一个EventRunner可以和多个EventHandler进行绑定,且主线程默认有一个EventRunner。子线程中执行完耗时操作后,可以适用主线程绑定的EventHandler对象通知主线程去进行操作,这样就实现了线程间的通信。

相关推荐
和侧5 分钟前
离子注入后为什么必须配套退火工艺?
笔记·学习
TheBlackHoleLab4 小时前
【Vulnhub系列】DarkHole1: 渗透测试笔记,没有踩渗透的坑,却踩到了虚拟机平台的坑,人生处处是大坑
笔记·vulnhub·easy·darkhole1
ACP广源盛139246256734 小时前
硬件选型笔记:GSV2231@ACP,DP1.4 MST 一进三出多屏扩展方案评估
笔记·硬件架构·视频·mst·国产芯片
Awh-5 小时前
ARM 裸机开发 DAY11 学习笔记
arm开发·笔记·学习
志尊宝5 小时前
Vue3 零基础每日笔记(087):Vue3 高频面试题(下)
前端·javascript·vue.js·笔记·ecmascript·#vue.js
叶子丶苏5 小时前
VibeCoding实战三个AI小项目-VibeCoding入门笔记02
大数据·人工智能·笔记
OH_TPC6 小时前
HarmonyOS APP开发---“习惯猫“习惯打卡App,需要用到这个库
华为·harmonyos·鸿蒙
Mr清奇6 小时前
AI辅助开发笔记(1)开发工具和配置
大数据·笔记·intellij idea
Go Work6 小时前
我把 @RefreshScope 挂错了类,新值一直灌不进去
经验分享·笔记
熊猫钓鱼>_>8 小时前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙