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