介绍
在HarmonyOS中,参考官方指导,其实你会发现在‘指南’和‘API参考’两个文档中,对消息传递使用的技术不是一对一的关系,那么今天这篇文章带你全面了解HarmonyOS 中的消息传递
概况
参照官方指导,我总结了两部分:1. 官方“指南”,即下图中的“Stage模型” 2. 总结的内容,即“消息事件”

开始
EventHub
这个其实是可以帮大家解决几个最常见的消息传递场景:1. UIAbility和其它 2.页面和其它 3. 组件和其它
指导文档:[《鸿蒙NEXT星河版开发学习文档》]

1. 订阅
或者+mau123789是v获得相关文档
this.context.eventHub.on('onConfigurationUpdate', (data) = > {
//订阅
});
复制
2. 发送
let eventhub = this.context.eventHub;
eventhub.emit('onConfigurationUpdate', config);
复制
3. 解除订阅
this.context.eventHub.off('onConfigurationUpdate')
复制
CommonEvent
参照官方指南,其总称简写为CES(全称:Common Event Service),可以监听系统锁屏,时间变化,等等
1. 订阅
usual.event.TIME_TICK : 系统公共事件
harvey.event.CUSTOM_1 : 自定义事件
let subscribeInfo = {
events: ["usual.event.TIME_TICK", 'harvey.event.CUSTOM_1']
}
// 1. 创建订阅者
commonEventManager.createSubscriber(subscribeInfo, (err, subscriber) = > {
if (err) {
console.error(`Failed to create subscriber. Code is ${err.code}, message is ${err.message}`);
return;
}
console.info('Succeeded in creating subscriber.' + JSON.stringify(subscriber));
this.subscriberID = subscriber
// 2. 订阅事件回调
commonEventManager.subscribe(subscriber, (err, commonEventData) = > {
if (err) {
console.error(`Failed to subscribe common event. Code is ${err.code}, message is ${err.message}`);
return;
} else {
systemDateTime.getCurrentTime(false, (error, data) = > {
this.mySubscriberInfo = data + '<= >' + JSON.stringify(commonEventData, null, 't')
})
}
})
})
2. 发送
对于系统级别的公共事件, 三方应用无权发送公共事件(即,即使你发送了,也是不会被收到的)
但是你可以自定义自己的公共事件
commonEventManager.publish('harvey.event.CUSTOM_1', option, (error) = > {
console.log(JSON.stringify(error))
})
3. 解除订阅
解除时用的是订阅者ID
commonEventManager.unsubscribe(this.subscriberID);
Emitter
1. 订阅
必须要有eventId, 这个代表消息的唯一标识
let innerEvent = {
eventId: 1847
};
emitter.on(innerEvent, (eventData) = > {
this.emitterData = process.tid + ' ' + JSON.stringify(eventData)
});
2. 发送
let eventData = {
data: {
'count': this.emitterCount++,
'from': 'emitter',
"content": "c",
"id": 1,
}};
let innerEvent = {
eventId: 1847,
priority: emitter.EventPriority.HIGH
};
emitter.emit(innerEvent, eventData);
3. 解除订阅
emitter.off(1847)
Worker
1. 订阅
import worker from '@ohos.worker';
let wk1 = new worker.ThreadWorker("/entry/ets/workers/Worker.ts")
wk1.onmessage = (msg) = > {
}
2. 发送
a)从worker线程中发送
import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker';
var workerPort : ThreadWorkerGlobalScope = worker.workerPort;
workerPort.postMessage(
{
......
}
)
b) 从主线程中发送
wk1.dispatchEvent({type: 'message', timeStamp: 0})
3. 解除订阅
//第一种
wk1.off('message')
//第二种
wk1.removeEventListener('message')
//第三种:强制关闭线程
wk1..terminate()
TaskTool 和 Notification
- [TaskTools]
- [Notification]
总结
HarmonyOS是一个新系统,还是要实践才可能在真实的业务开发中灵活运用
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
鸿蒙
+关注
关注
60文章
3016浏览量
46163 -
HarmonyOS
+关注
关注
80文章
2157浏览量
36280 -
鸿蒙OS
+关注
关注
0文章
193浏览量
5544
发布评论请先 登录
相关推荐
热点推荐
开源鸿蒙6.1 Release版本正式发布,在鸿OS 6.1率先完成升级适配!
3月8日,开源鸿蒙6.1Release版本正式发布!作为新一代版本,6.1在应用开发能力、系统体验、多媒体与安全等领域带来全面升级,为生态商用落地注入全新动能。作为开放原子开源基金会黄金捐赠人、开源
【汇思博SEEK100开发板试用体验】在开发板鸿蒙OS搭建QT开发环境
功能或者网络通信失败等,检查代码中对相关功能的实现逻辑,是否正确调用了鸿蒙系统提供的 API 以及 Qt 的相关模块。例如,在调用开发板摄像头功能时,检查是否获取到了正确的摄像头设备实例,并且是否按照规范进行了设备的初始化和操作
发表于 08-24 18:34
【HarmonyOS 5】鸿蒙中的UIAbility详解(二)
【HarmonyOS 5】鸿蒙中的UIAbility详解(二) ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 今天我们继续深入讲解
鸿蒙5开发宝藏案例分享---一多开发实例(音乐)
各位开发者小伙伴们好呀!今天咱们来点硬核干货!最近在鸿蒙文档中心挖到一座“金矿”——官方竟然暗藏了100+实战案例,从分布式架构到交互动效优化应有尽有!这些案例不仅藏着华为工程师的私房技巧,还直接
鸿蒙5开发宝藏案例分享---跨线程性能优化指南
;>Worker</span>做多线程开发时,总遇到对象跨线程卡顿的问题,原来鸿蒙早就提供了解决方案。下面结合代码和实战案例,带你彻底玩转性能优化!
一、痛点:跨线程
发表于 06-12 17:13
鸿蒙5开发宝藏案例分享---一多开发实例(游戏)
?【开发者必看】鸿蒙隐藏宝箱大公开!这些实战案例让你的开发效率翻倍!
哈喽各位开发者小伙伴!今天要和大家分享一个让我拍大腿的发现——原来鸿蒙
发表于 06-03 18:22
鸿蒙5开发案例分享揭秘---一多开发实例(商务办公)
?【鸿蒙开发宝藏案例大揭秘】原来官方文档里藏了这么多好东西!
大家好呀~最近在肝鸿蒙项目时意外扒出了官方文档里的\"藏宝库\"!原来那些让人头秃的跨端适配难题,官方早就准备好
发表于 06-03 16:24
鸿蒙5开发宝藏案例分享---一多开发实例(地图导航)
案例!最近在肝鸿蒙项目时意外发现了这个地图导航的\"一多\"开发实例,简直像发现新大陆!这就带大家沉浸式体验这个超实用的开发模板~
? 先划重点:这个案例完美演示了如何用一套代码搞定
发表于 06-03 16:17
鸿蒙5开发宝藏案例分享---一多开发实例(旅行订票)
? 鸿蒙开发宝藏大发现!一多开发实战案例解析(旅行订票篇)
大家好!今天在翻鸿蒙开发者文档时,意外发现了官方藏着一整片\"案例绿洲\"!尤其
发表于 06-03 16:16
鸿蒙5开发宝藏案例分享---一多开发实例(购物比价)
【鸿蒙开发宝藏案例大公开!】手把手教你用\"一多\"能力打造跨端购物比价App
小伙伴们好呀!今天要和大家分享一个鸿蒙开发的隐藏宝典——官方购物比价应用
发表于 06-03 16:07
鸿蒙5开发宝藏案例分享---一多开发实例(社区评论)
应用” 的一多开发实例,看完直呼“原来还能这样玩?!” ? 必须整理出来和大家唠唠,顺便带大家手把手拆解几个核心案例!
?** 一多开发是啥?一句话总结:**
一次开发,自动适配手机、
发表于 06-03 16:03
鸿蒙5开发宝藏案例分享---一多开发实例(长视频)
【?鸿蒙开发宝藏案例大起底!原来官方藏了这么多干货!】
大家好呀~最近在折腾鸿蒙应用开发的时候,意外发现了官方文档里藏着一堆超实用的开发案例
发表于 06-03 15:58
鸿蒙OS开发实例:【消息传递】
评论