進(jìn)程模型概述
HarmonyOS的進(jìn)程模型:
- 應(yīng)用中(同一包名)的所有UIAbility運(yùn)行在同一個獨(dú)立進(jìn)程中。
- WebView擁有獨(dú)立的渲染進(jìn)程。
基于HarmonyOS的進(jìn)程模型,系統(tǒng)提供了公共事件機(jī)制用于一對多的通信場景,公共事件發(fā)布者可能存在多個訂閱者同時接收事件。
公共事件簡介
HarmonyOS通過CES(Common Event Service,公共事件服務(wù))為應(yīng)用程序提供訂閱、發(fā)布、退訂公共事件的能力。
公共事件從系統(tǒng)角度可分為:系統(tǒng)公共事件和自定義公共事件。
- 系統(tǒng)公共事件:CES內(nèi)部定義的公共事件,只有系統(tǒng)應(yīng)用和系統(tǒng)服務(wù)才能發(fā)布,例如HAP安裝,更新,卸載等公共事件。目前支持的系統(tǒng)公共事件詳見系統(tǒng)公共事件列表。
- 自定義公共事件:應(yīng)用自定義一些公共事件用來實(shí)現(xiàn)跨進(jìn)程的事件通信能力。
公共事件按發(fā)送方式可分為:無序公共事件、有序公共事件和粘性公共事件。
- 無序公共事件:CES轉(zhuǎn)發(fā)公共事件時,不考慮訂閱者是否接收到,且訂閱者接收到的順序與其訂閱順序無關(guān)。
- 有序公共事件:CES轉(zhuǎn)發(fā)公共事件時,根據(jù)訂閱者設(shè)置的優(yōu)先級等級,優(yōu)先將公共事件發(fā)送給優(yōu)先級較高的訂閱者,等待其成功接收該公共事件之后再將事件發(fā)送給優(yōu)先級較低的訂閱者。如果有多個訂閱者具有相同的優(yōu)先級,則他們將隨機(jī)接收到公共事件。
- 粘性公共事件:能夠讓訂閱者收到在訂閱前已經(jīng)發(fā)送的公共事件就是粘性公共事件。普通的公共事件只能在訂閱后發(fā)送才能收到,而粘性公共事件的特殊性就是可以先發(fā)送后訂閱。發(fā)送粘性事件必須是系統(tǒng)應(yīng)用或系統(tǒng)服務(wù),且需要申請ohos.permission.COMMONEVENT_STICKY權(quán)限,配置方式請參閱訪問控制授權(quán)申請指導(dǎo)。
每個應(yīng)用都可以按需訂閱公共事件,訂閱成功,當(dāng)公共事件發(fā)布時,系統(tǒng)會將其發(fā)送給對應(yīng)的應(yīng)用。這些公共事件可能來自系統(tǒng)、其他應(yīng)用和應(yīng)用自身。
圖1 公共事件示意圖
公共事件發(fā)布
場景介紹
當(dāng)需要發(fā)布某個自定義公共事件時,可以通過publish()方法發(fā)布事件。發(fā)布的公共事件可以攜帶數(shù)據(jù),供訂閱者解析并進(jìn)行下一步處理。
注意
已發(fā)出的粘性公共事件后來訂閱者也可以接收到,其他公共事件都需要先訂閱再接收,訂閱參考公共事件訂閱章節(jié)。
接口說明
詳細(xì)接口見接口文檔。
接口名 | 接口描述 |
---|---|
publish(event: string, callback: AsyncCallback) | 發(fā)布公共事件。 |
publish(event: string, options: CommonEventPublishData, callback: AsyncCallback) | 指定發(fā)布信息并發(fā)布公共事件。 |
發(fā)布不攜帶信息的公共事件
不攜帶信息的公共事件,只能發(fā)布無序公共事件。
-
導(dǎo)入CommonEvent模塊。
import commonEvent from '@ohos.commonEventManager';
-
傳入需要發(fā)布的事件名稱和回調(diào)函數(shù),發(fā)布事件。文章來源:http://www.zghlxwxcb.cn/news/detail-806302.html
// 發(fā)布公共事件 commonEvent.publish("usual.event.SCREEN_OFF", (err) => { if (err) { console.error(`[CommonEvent] PublishCallBack err=${JSON.stringify(err)}`); } else { console.info(`[CommonEvent] Publish success`); } })
發(fā)布攜帶信息的公共事件
攜帶信息的公共事件,可以發(fā)布為無序公共事件、有序公共事件和粘性事件,可以通過參數(shù)CommonEventPublishData的isOrdered、isSticky的字段進(jìn)行設(shè)置。
-
導(dǎo)入CommonEvent模塊。
import commonEvent from '@ohos.commonEventManager';
-
傳入需要發(fā)布的事件名稱和回調(diào)函數(shù),發(fā)布事件。
// 公共事件相關(guān)信息 let options = { code: 1, // 公共事件的初始代碼 data: "initial data", // 公共事件的初始數(shù)據(jù) }
-
傳入需要發(fā)布的事件名稱、需要發(fā)布的指定信息和回調(diào)函數(shù),發(fā)布事件。文章來源地址http://www.zghlxwxcb.cn/news/detail-806302.html
// 發(fā)布公共事件 commonEvent.publish("usual.event.SCREEN_OFF", options, (err) => { if (err) { console.error('[CommonEvent] PublishCallBack err=' + JSON.stringify(err)); } else { console.info('[CommonEvent] Publish success') } })
到了這里,關(guān)于HarmonyOS4.0系統(tǒng)性深入開發(fā)19進(jìn)程模型概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!