跟阿斌一起學(xué)鴻蒙(4). 分布式Hello Harmony的N種寫(xiě)法
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
鴻蒙OS是一個(gè)分布式操作系統(tǒng),而Ability作為它調(diào)度的基本單元,那么,一個(gè)分布式Hello Harmony可以有幾種寫(xiě)法呢?
# 分布式Hello Harmony用例
## 1. 根據(jù)Ability類型
### 1). FA <-> FA
FA = Feature Ability,用于顯示的前臺(tái)能力。
可以理解為兩個(gè)前端應(yīng)用在協(xié)作。
FA/FA模式的Hello Harmony,就是我說(shuō)Hello, 你說(shuō)Harmony。
在鴻蒙OS中,F(xiàn)A與FA的協(xié)作,有三種方式:
* 啟動(dòng),即一個(gè)FA啟動(dòng)另一個(gè)FA
這嚴(yán)格來(lái)說(shuō)并不算是一個(gè)協(xié)作,只是與別的操作系統(tǒng)類似,鴻蒙OS也提供了不同應(yīng)用或者進(jìn)程相互啟動(dòng)的能力。
* 遷移(轉(zhuǎn)移,流轉(zhuǎn),接力),即一個(gè)界面從一臺(tái)設(shè)備,轉(zhuǎn)移到另一臺(tái)設(shè)備上。
例如,導(dǎo)航,查詢的時(shí)候在手機(jī)上,開(kāi)車的時(shí)候在汽車車機(jī)上,走路的時(shí)候在手表上,甚至耳機(jī)上。
例如,視頻播放,從手機(jī)轉(zhuǎn)移到電視。
* 協(xié)同,多臺(tái)設(shè)備在各自的界面上一起完成同一個(gè)工作。
例如,多人一起修改一個(gè)文檔。
例如,多人一起聯(lián)機(jī)玩游戲。
需要注意的是,在鴻蒙OS的設(shè)計(jì)中,F(xiàn)A之間的協(xié)同,如果不依靠PA的幫助,是很難直接進(jìn)行的。這就好像是MVC架構(gòu)中,為了解耦合,不同的View之間通常并不直接進(jìn)行交互。
我們當(dāng)然可以利用一些非鴻蒙OS獨(dú)有的特性,例如網(wǎng)絡(luò),在不同F(xiàn)A之間搭建起溝通的橋梁,不過(guò),這就非常不鴻蒙了。
### 2). FA <-> PA
PA = Particle Ability,不帶顯示的后臺(tái)服務(wù)能力。
前臺(tái)界面與后臺(tái)服務(wù)進(jìn)行協(xié)作。
FA/PA的Hello Harmony,就是你大聲說(shuō)Hello, 我小聲說(shuō)Harmony。
這種交互,即使是在現(xiàn)在的APP開(kāi)發(fā)中,也是一種常見(jiàn)的前后端分離的架構(gòu)設(shè)計(jì)。
利用鴻蒙OS的多設(shè)備連接能力,可以方便實(shí)現(xiàn),在最適合顯示(交互)的設(shè)備上運(yùn)行FA,而在算力更強(qiáng)更富余的設(shè)備上運(yùn)行PA。
例如,用手機(jī)與電視進(jìn)行游戲,手機(jī)充當(dāng)游戲主機(jī)(和手柄),而電視充當(dāng)顯示。
### 3). PA <-> PA
不同后臺(tái)服務(wù)進(jìn)行協(xié)作。
PA/PA的Hello Harmony,就是你小聲對(duì)我說(shuō)Hello,我也小聲回復(fù)Harmony。
這樣,不同的PA可以專注負(fù)責(zé)自己的業(yè)務(wù),然后通過(guò)組合,完成更復(fù)雜的任務(wù)。
其實(shí),Data Ability 可以認(rèn)為就是專門(mén)處理數(shù)據(jù)存儲(chǔ)的任務(wù)的一個(gè)PA,而普通Service Ability則是負(fù)責(zé)處理具體的任務(wù),利用DA,可以輕松為一個(gè)任務(wù)增加存儲(chǔ)功能。
## 2. 根據(jù)應(yīng)用
* 1). 同應(yīng)用
* 2). 不同應(yīng)用
其實(shí),應(yīng)用的概念在鴻蒙OS中已經(jīng)被邊緣化了,而Ability才是現(xiàn)在的C位。
所以,并不存在應(yīng)用A說(shuō)Hello,應(yīng)用B說(shuō)Harmony這種場(chǎng)景,只有Ability A說(shuō)Hello,Ability B說(shuō)Harmony的場(chǎng)景。
基于這個(gè)設(shè)定,其實(shí),我們不應(yīng)關(guān)心Ability屬于哪個(gè)應(yīng)用,因?yàn)槊總€(gè)Ability都是獨(dú)立的。
如果你還是繞不過(guò)來(lái),你可以暫時(shí)直接認(rèn)為一個(gè)Ability就是一個(gè)應(yīng)用。但是,要注意,在鴻蒙OS中,一個(gè)Ability很可能沒(méi)法像傳統(tǒng)的App那樣,獨(dú)立完成一個(gè)任務(wù)。
而在代碼的組織和編寫(xiě)時(shí),對(duì)于共同完成一個(gè)任務(wù)的不同Ability,它們之間難免會(huì)有交集,而這,也僅僅限于代碼編寫(xiě)時(shí),在運(yùn)行時(shí),每個(gè)Ability都有自己的進(jìn)程和內(nèi)存空間。
## 3. 根據(jù)設(shè)備
* 1). 單設(shè)備
* 2). 跨設(shè)備
鴻蒙OS天生具有連接多設(shè)備的能力,而對(duì)于開(kāi)發(fā)者來(lái)說(shuō),需要考慮的是當(dāng)前環(huán)境下有多少已經(jīng)連接的設(shè)備,而不是要去連接哪臺(tái)設(shè)備。
具體的說(shuō),就是,我們不需要考慮網(wǎng)絡(luò)的問(wèn)題,而是要考慮,在當(dāng)前環(huán)境中,用哪個(gè)設(shè)備來(lái)完成任務(wù)更合理。
有多設(shè)備環(huán)境下的分布式Hello Harmony,
* 可以每臺(tái)設(shè)備輪流說(shuō)Hello Harmony,即你說(shuō)Hello Harmony,我也說(shuō)Hello Harmony。
* 也可以所有設(shè)備一起完成一個(gè)Hello Harmony,即你說(shuō)Hello 我說(shuō) Harmony。
# 參考文檔
* Ability 概述
> https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-ability-overview-0000000000029852
* 分布式任務(wù)調(diào)度
> https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-distributed-overview-0000001050419345
# 后續(xù)
接下來(lái),我將對(duì)不同的寫(xiě)法,一一進(jìn)行講解,歡迎持續(xù)關(guān)注。
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz