0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙OS开发实例:【消息传递】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-03-29 17:48 次阅读

介绍

HarmonyOS中,参考官方指导,其实你会发现在‘指南’和‘API参考’两个文档中,对消息传递使用的技术不是一对一的关系,那么今天这篇文章带你全面了解HarmonyOS 中的消息传递

概况

参照官方指导,我总结了两部分:1. 官方“指南”,即下图中的“Stage模型” 2. 总结的内容,即“消息事件”

开始

EventHub

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

搜狗高速浏览器截图20240326151450.png

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
    的头像 发表于 04-12 16:58 302次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b><b class='flag-5'>实例</b>:【HarmonyHttpClient】网络框架

    鸿蒙OS开发学习:【尺寸适配实现】

    鸿蒙开发中,尺寸适配是一个重要的概念,它可以帮助我们在不同屏幕尺寸的设备上正确显示和布局我们的应用程序。本文将介绍如何在鸿蒙开发中实现尺寸适配的方法。
    的头像 发表于 04-10 16:05 652次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b>学习:【尺寸适配实现】

    鸿蒙OS南向开发实战:【智能电子牌】

    本Demo是基于hi3516dv300开发板,使用开源鸿蒙OpenHarmony 开发的应用。通过该应用不仅可以查看时间、日期以及对应的室内外温湿度、空气质量等,还可以查看当日的行程,让我们随时随地把握行程,不会遗漏任何重要的安
    的头像 发表于 04-09 15:24 475次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b>南向<b class='flag-5'>开发</b>实战:【智能电子牌】

    鸿蒙OS开发实例:【应用事件打点】

    传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志,难以识别其中的关键信息。因此,应用开发者需要一种数据打点机制,用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息
    的头像 发表于 04-07 17:13 150次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b><b class='flag-5'>实例</b>:【应用事件打点】

    鸿蒙OS开发实例:【手撸服务卡片】

    服务卡片指导文档位于“**开发/应用模型/Stage模型开发指导/Stage模型应用组件**”路径下,说明其极其重要。本篇文章将分享实现服务卡片的过程和代码
    的头像 发表于 03-28 22:11 735次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b><b class='flag-5'>实例</b>:【手撸服务卡片】

    鸿蒙OS开发实例:【工具类封装-emitter组件间通信】

    `MyEmitterUtil` 是一个针对 HarmonyOS 的事件驱动编程封装类,主要用于组件间的通信和数据传递
    的头像 发表于 03-27 22:13 113次阅读

    鸿蒙开发实例【使用高德地图鸿蒙SDK】(一)

    使用高德地图鸿蒙SDK的快速入门指南。
    的头像 发表于 03-22 16:59 232次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b><b class='flag-5'>实例</b>【使用高德地图<b class='flag-5'>鸿蒙</b>SDK】(一)

    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 快速开发鸿蒙原生应用,也可将现有的
    的头像 发表于 02-02 16:09 387次阅读
    使用 Taro <b class='flag-5'>开发</b><b class='flag-5'>鸿蒙</b>原生应用 —— 快速上手,<b class='flag-5'>鸿蒙</b>应用<b class='flag-5'>开发</b>指南

    鸿蒙OS和开源鸿蒙什么关系?

    内核,其他功能都以模块的形式存在。     华为用的是鸿蒙OS 我们都知道,华为手机的鸿蒙OS是可以运行安卓软件的,是因为系统中有安卓兼容层,所以可以简单这么理解:
    的头像 发表于 01-30 15:44 388次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b>和开源<b class='flag-5'>鸿蒙</b>什么关系?

    免费学习鸿蒙(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。
    的头像 发表于 06-15 10:55 4948次阅读