介绍
在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是一个新系统,还是要实践才可能在真实的业务开发中灵活运用
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
鸿蒙
+关注
关注
55文章
1637浏览量
42122 -
HarmonyOS
+关注
关注
79文章
1853浏览量
29267 -
鸿蒙OS
+关注
关注
0文章
147浏览量
4280
发布评论请先 登录
相关推荐
鸿蒙OS开发实例:【HarmonyHttpClient】网络框架
鸿蒙上使用的Http网络框架,里面包含纯Java实现的HttpNet,类似okhttp使用,支持同步和异步两种请求方式;还有鸿蒙版retrofit,和Android版Retrofit相似的使用,解放双手般优雅使用注解、自动解析json
鸿蒙OS南向开发实战:【智能电子牌】
本Demo是基于hi3516dv300开发板,使用开源鸿蒙OpenHarmony 开发的应用。通过该应用不仅可以查看时间、日期以及对应的室内外温湿度、空气质量等,还可以查看当日的行程,让我们随时随地把握行程,不会遗漏任何重要的安
鸿蒙OS开发实例:【应用事件打点】
传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志,难以识别其中的关键信息。因此,应用开发者需要一种数据打点机制,用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息
鸿蒙OS开发实例:【工具类封装-emitter组件间通信】
`MyEmitterUtil` 是一个针对 HarmonyOS 的事件驱动编程封装类,主要用于组件间的通信和数据传递。
2024款鸿蒙OS 最新HarmonyOS Next_HarmonyOS4.0系列教程分享
鸿蒙的出现,标志着中国科技的崛起。HarmonyOS就是我们说的华为鸿蒙系统,截止到2023年8月4日已有超过7亿台设备搭载了鸿蒙OS系统。据多家媒体报道,2024年国内有21所985
发表于 02-28 10:29
使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南
随着鸿蒙系统的不断完善,许多应用厂商都希望将自己的应用移植到鸿蒙平台上。最近,Taro 发布了 v4.0.0-beta.x 版本,支持使用 Taro 快速开发鸿蒙原生应用,也可将现有的
免费学习鸿蒙(HarmonyOS)开发,一些地址分享
国内一流高校。通过鸿蒙班的设立,高校可以为学生提供专业的鸿蒙OS学习环境和丰富的实践机会,培养出更多的鸿蒙开发人才,为
发表于 01-12 20:48
华为鸿蒙系统
华为鸿蒙系统(HUAWEI Harmony OS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的操作系统。
华为鸿蒙系统是一款全新的面向全场
发表于 11-02 19:39
鸿蒙 OS 应用开发初体验
的操作系统平台和开发框架。HarmonyOS 的目标是实现跨设备的无缝协同和高性能。
DevEco Studio
对标 Android Studio,开发鸿蒙 OS 应用的 IDE。
发表于 11-02 19:38
Orange Pi OS(OH)发布,开源鸿蒙PC端来了!
正式向大家宣布一个喜讯:基于OpenHarmony定制研发的Orange Pi OS(OH)即将发布!日前,迅龙开源鸿蒙的工程师团队已经在搭载RK3566的开发板Orange Pi 3B上完成
发表于 10-26 11:32
华为鸿蒙OS4.0定档8月4号,华为Mate60首发
在本届大会上,华为将展示鸿蒙生态界的新成果、新开放能力以及鸿蒙开发产品套件。对于许多用户来说,本次会议最值得期待的是鸿蒙os 4.0。
评论