0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS開發(fā)實例:【消息傳遞】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-29 17:48 ? 次閱讀

介紹

HarmonyOS中,參考官方指導(dǎo),其實你會發(fā)現(xiàn)在‘指南’和‘API參考’兩個文檔中,對消息傳遞使用的技術(shù)不是一對一的關(guān)系,那么今天這篇文章帶你全面了解HarmonyOS 中的消息傳遞

概況

參照官方指導(dǎo),我總結(jié)了兩部分:1. 官方“指南”,即下圖中的“Stage模型” 2. 總結(jié)的內(nèi)容,即“消息事件”

開始

EventHub

這個其實是可以幫大家解決幾個最常見的消息傳遞場景:1. UIAbility和其它 2.頁面和其它 3. 組件和其它
指導(dǎo)文檔:[《鴻蒙NEXT星河版開發(fā)學(xué)習(xí)文檔》]

搜狗高速瀏覽器截圖20240326151450.png

1. 訂閱

或者+mau123789是v獲得相關(guān)文檔
this.context.eventHub.on('onConfigurationUpdate', (data) = > {
    //訂閱

});
復(fù)制

2. 發(fā)送

let eventhub = this.context.eventHub;
eventhub.emit('onConfigurationUpdate', config);
復(fù)制

3. 解除訂閱

this.context.eventHub.off('onConfigurationUpdate')
復(fù)制

CommonEvent

參照官方指南,其總稱簡寫為CES(全稱:Common Event Service),可以監(jiān)聽系統(tǒng)鎖屏,時間變化,等等

1. 訂閱

usual.event.TIME_TICK : 系統(tǒng)公共事件

harvey.event.CUSTOM_1 : 自定義事件

let subscribeInfo = {
  events: ["usual.event.TIME_TICK", 'harvey.event.CUSTOM_1']
}

// 1. 創(chuàng)建訂閱者
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. 訂閱事件回調(diào)
  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. 發(fā)送

對于系統(tǒng)級別的公共事件, 三方應(yīng)用無權(quán)發(fā)送公共事件(即,即使你發(fā)送了,也是不會被收到的)

但是你可以自定義自己的公共事件

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. 發(fā)送

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. 發(fā)送

a)從worker線程中發(fā)送

import worker, { ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@ohos.worker';

var workerPort : ThreadWorkerGlobalScope = worker.workerPort;

workerPort.postMessage(
  {
    ......
  }
)

b) 從主線程中發(fā)送

wk1.dispatchEvent({type: 'message', timeStamp: 0})

3. 解除訂閱

//第一種
wk1.off('message')
//第二種
wk1.removeEventListener('message')
//第三種:強制關(guān)閉線程
wk1..terminate()

TaskTool 和 Notification

  • [TaskTools]
  • [Notification]

總結(jié)

HarmonyOS是一個新系統(tǒng),還是要實踐才可能在真實的業(yè)務(wù)開發(fā)中靈活運用

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2287

    瀏覽量

    42629
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1954

    瀏覽量

    29897
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4346
收藏 人收藏

    評論

    相關(guān)推薦

    HDC2024華為發(fā)布鴻蒙原生智能:AI與OS深度融合,開啟全新的AI時代

    6月21日,華為開發(fā)者大會2024(HDC.2024)召開。 HarmonyOS NEXT將AI與OS深度融合,構(gòu)筑全新鴻蒙原生智能框架。大會現(xiàn)場,華為常務(wù)董事、終端BG董事長、智能汽車解決方案BU
    的頭像 發(fā)表于 06-24 09:28 ?549次閱讀
    HDC2024華為發(fā)布<b class='flag-5'>鴻蒙</b>原生智能:AI與<b class='flag-5'>OS</b>深度融合,開啟全新的AI時代

    鴻蒙開發(fā):信息傳遞載體Want

    其中,一種常見的使用場景是作為[`startAbility()`]方法的參數(shù)。例如,當UIAbilityA需要啟動UIAbilityB并向UIAbilityB傳遞一些數(shù)據(jù)時,可以使用Want作為一個載體,將數(shù)據(jù)傳遞給UIAbilityB。
    的頭像 發(fā)表于 06-21 15:14 ?346次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:信息<b class='flag-5'>傳遞</b>載體Want

    鴻蒙OS崛起,鴻蒙應(yīng)用開發(fā)工程師成市場新寵

    應(yīng)用的形態(tài)也在發(fā)生著翻天覆地的變化。作為全球領(lǐng)先的移動操作系統(tǒng)和智能終端制造商,華為公司自主研發(fā)的鴻蒙OS應(yīng)運而生,致力于構(gòu)建一個統(tǒng)一的分布式操作系統(tǒng),為各行各業(yè)的應(yīng)用開發(fā)帶來全新的可能性。 一、
    發(fā)表于 04-29 17:32

    OpenHarmony開發(fā)實例:【鴻蒙.bin文件燒錄】

    如何使用HiBurn工具燒錄鴻蒙的.bin文件到Hi3861開發(fā)板。
    的頭像 發(fā)表于 04-14 09:54 ?343次閱讀
    OpenHarmony<b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【<b class='flag-5'>鴻蒙</b>.bin文件燒錄】

    鴻蒙OS開發(fā)實例:【HarmonyHttpClient】網(wǎng)絡(luò)框架

    鴻蒙上使用的Http網(wǎng)絡(luò)框架,里面包含純Java實現(xiàn)的HttpNet,類似okhttp使用,支持同步和異步兩種請求方式;還有鴻蒙版retrofit,和Android版Retrofit相似的使用,解放雙手般優(yōu)雅使用注解、自動解析json
    的頭像 發(fā)表于 04-12 16:58 ?755次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【HarmonyHttpClient】網(wǎng)絡(luò)框架

    鴻蒙OS開發(fā)學(xué)習(xí):【尺寸適配實現(xiàn)】

    鴻蒙開發(fā)中,尺寸適配是一個重要的概念,它可以幫助我們在不同屏幕尺寸的設(shè)備上正確顯示和布局我們的應(yīng)用程序。本文將介紹如何在鴻蒙開發(fā)中實現(xiàn)尺寸適配的方法。
    的頭像 發(fā)表于 04-10 16:05 ?1545次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b>學(xué)習(xí):【尺寸適配實現(xiàn)】

    鴻蒙OS開發(fā)實例:【組件化模式】

    組件化一直是移動端比較流行的開發(fā)方式,有著編譯運行快,業(yè)務(wù)邏輯分明,任務(wù)劃分清晰等優(yōu)點,針對Android端的組件化;與Android端的組件化相比,HarmonyOS的組件化可以說實現(xiàn)起來就頗費
    的頭像 發(fā)表于 04-07 17:44 ?525次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【組件化模式】

    鴻蒙OS開發(fā)實例:【應(yīng)用事件打點】

    傳統(tǒng)的日志系統(tǒng)里匯聚了整個設(shè)備上所有程序運行的過程流水日志,難以識別其中的關(guān)鍵信息。因此,應(yīng)用開發(fā)者需要一種數(shù)據(jù)打點機制,用來評估如訪問數(shù)、日活、用戶操作習(xí)慣以及影響用戶使用的關(guān)鍵因素等關(guān)鍵信息
    的頭像 發(fā)表于 04-07 17:13 ?380次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【應(yīng)用事件打點】

    鴻蒙OS開發(fā)實例:【通知消息】

    HarmonyOS 論壇中有研發(fā)人員求助,反饋通知沒有沒有聲音,因此在真機上驗證了一下,果不其然,沒有通知的提示音,后來解決辦法也非常簡單,在手機設(shè)置應(yīng)用中,將可以打開的通知提示統(tǒng)統(tǒng)改為鈴聲。
    的頭像 發(fā)表于 04-01 15:34 ?492次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實例</b>:【通知消息】

    2024款鴻蒙OS 最新HarmonyOS Next_HarmonyOS4.0系列教程分享

    鴻蒙的出現(xiàn),標志著中國科技的崛起。HarmonyOS就是我們說的華為鴻蒙系統(tǒng),截止到2023年8月4日已有超過7億臺設(shè)備搭載了鴻蒙OS系統(tǒng)。據(jù)多家媒體報道,2024年國內(nèi)有21所985
    發(fā)表于 02-28 10:29

    使用 Taro 開發(fā)鴻蒙原生應(yīng)用 —— 快速上手,鴻蒙應(yīng)用開發(fā)指南

    隨著鴻蒙系統(tǒng)的不斷完善,許多應(yīng)用廠商都希望將自己的應(yīng)用移植到鴻蒙平臺上。最近,Taro 發(fā)布了 v4.0.0-beta.x 版本,支持使用 Taro 快速開發(fā)鴻蒙原生應(yīng)用,也可將現(xiàn)有的
    的頭像 發(fā)表于 02-02 16:09 ?758次閱讀
    使用 Taro <b class='flag-5'>開發(fā)</b><b class='flag-5'>鴻蒙</b>原生應(yīng)用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應(yīng)用<b class='flag-5'>開發(fā)</b>指南

    鴻蒙OS和開源鴻蒙什么關(guān)系?

    內(nèi)核,其他功能都以模塊的形式存在。 ? ? 華為用的是鴻蒙OS 我們都知道,華為手機的鴻蒙OS是可以運行安卓軟件的,是因為系統(tǒng)中有安卓兼容層,所以可以簡單這么理解:
    的頭像 發(fā)表于 01-30 15:44 ?971次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OS</b>和開源<b class='flag-5'>鴻蒙</b>什么關(guān)系?

    免費學(xué)習(xí)鴻蒙(HarmonyOS)開發(fā),一些地址分享

    國內(nèi)一流高校。通過鴻蒙班的設(shè)立,高??梢詾閷W(xué)生提供專業(yè)的鴻蒙OS學(xué)習(xí)環(huán)境和豐富的實踐機會,培養(yǎng)出更多的鴻蒙開發(fā)人才,為
    發(fā)表于 01-12 20:48

    鴻蒙 OS 應(yīng)用開發(fā)初體驗

    的操作系統(tǒng)平臺和開發(fā)框架。HarmonyOS 的目標是實現(xiàn)跨設(shè)備的無縫協(xié)同和高性能。 DevEco Studio 對標 Android Studio,開發(fā)鴻蒙 OS 應(yīng)用的 IDE。
    發(fā)表于 11-02 19:38

    Orange Pi OS(OH)發(fā)布,開源鴻蒙PC端來了!

    正式向大家宣布一個喜訊:基于OpenHarmony定制研發(fā)的Orange Pi OS(OH)即將發(fā)布!日前,迅龍開源鴻蒙的工程師團隊已經(jīng)在搭載RK3566的開發(fā)板Orange Pi 3B上完成
    發(fā)表于 10-26 11:32