CH8-HarmonyOS流转架构解析
文章目錄
- 前言
- 目標(biāo)
- 核心概念
- 流轉(zhuǎn)架構(gòu)特性
- Ability的調(diào)度
- 流轉(zhuǎn)應(yīng)用場景
- 流轉(zhuǎn)架構(gòu)
- 核心模塊
- 跨端遷移關(guān)鍵流程
- 多端協(xié)同關(guān)鍵流程
- 分布式任務(wù)調(diào)度
- 連接遠(yuǎn)程PA
- 啟動遠(yuǎn)程FA/PA
- 遷移FA
- 接口IAbilityContinuation的方法
- 跨端遷移功能開發(fā)
- 多端協(xié)同功能開發(fā)
- 啟動遙控器
- 連接遠(yuǎn)程智慧屏
- 遙控器與智慧屏交互
- 本章總結(jié)
前言
- 物聯(lián)網(wǎng)時(shí)代的核心是具備互聯(lián)互通能力的智能設(shè)備,目前智能市場的現(xiàn)狀遠(yuǎn)不能達(dá)到預(yù)定的目標(biāo)。
- 現(xiàn)實(shí)的工作生活場景是用戶擁有的設(shè)備越來越多,每個設(shè)備都能在適合的場景下提供良好的體驗(yàn),例如:手表可以提供及時(shí)的信息查看能力,電視可以帶來沉浸的觀影體驗(yàn)。
- 但是每個設(shè)備也有使用場景的局限,例如:在電視上輸入文本相對手機(jī)來說是非常糟糕的體驗(yàn)。因此每個設(shè)備都成為“設(shè)備孤島”,使用頻率和效率低下。
目標(biāo)
- 理解流轉(zhuǎn)架構(gòu)的工作原理和工作過程,
- 能夠使用跨端流轉(zhuǎn)功能和多端協(xié)同功能來開發(fā)具有多端交互能力的分布式APP。
核心概念
- 跨端遷移:一種實(shí)現(xiàn)用戶應(yīng)用程序流轉(zhuǎn)的技術(shù)方案,指在A端運(yùn)行的FA遷移到B端上,完成遷移后, B端FA繼續(xù)任務(wù),而A端應(yīng)用退出。
- 多端協(xié)同:一種實(shí)現(xiàn)用戶應(yīng)用程序流轉(zhuǎn)的技術(shù)方案,指多端上的不同F(xiàn)A/PA同時(shí)運(yùn)行、或者交替運(yùn)行實(shí)現(xiàn)完整的業(yè)務(wù);或者,多端上的相同F(xiàn)A/PA同時(shí)運(yùn)行實(shí)現(xiàn)完整的業(yè)務(wù)。多個設(shè)備作為一個整體為用戶提供比單設(shè)備更加高效、沉浸的體驗(yàn)。
流轉(zhuǎn)架構(gòu)特性
- 在HarmonyOS中,流轉(zhuǎn)泛指多設(shè)備分布式操作。流轉(zhuǎn)能力打破設(shè)備界限,多設(shè)備聯(lián)動,使用戶應(yīng)用程序可分可合、可流轉(zhuǎn)。
- 流轉(zhuǎn)架構(gòu)對搭載HarmonyOS的多設(shè)備構(gòu)筑的“超級虛擬終端”提供統(tǒng)一的組件管理能力,為應(yīng)用屏蔽硬件差異;
- 支持遠(yuǎn)程啟動、遠(yuǎn)程調(diào)用、業(yè)務(wù)無縫遷移等分布式任務(wù)。
- 流轉(zhuǎn)架構(gòu)在底層實(shí)現(xiàn)Ability(分布式操作的基本組件)跨設(shè)備的啟動/關(guān)閉、連接及斷開連接以及遷移等能力,實(shí)現(xiàn)跨設(shè)備的組件管理。
Ability的調(diào)度
- 啟動和關(guān)閉:向開發(fā)者提供管理遠(yuǎn)程Ability的能力,即支持啟動Page模板的Ability,以
及啟動、關(guān)閉Service和Data模板的Ability。 - 連接和斷開連接:向開發(fā)者提供跨設(shè)備控制服務(wù)(Service和Data模板的Ability)的能力,
開發(fā)者可以通過與遠(yuǎn)程服務(wù)連接及斷開連接實(shí)現(xiàn)獲取或注銷跨設(shè)備管理服務(wù)的對象,達(dá)到和本地一致的服務(wù)調(diào)度。 - 遷移能力:向開發(fā)者提供跨設(shè)備業(yè)務(wù)的無縫遷移能力,開發(fā)者可以通過調(diào)用Page模板
Ability的遷移接口,將本地業(yè)務(wù)無縫遷移到指定設(shè)備中,打通設(shè)備間壁壘。
流轉(zhuǎn)應(yīng)用場景
- 導(dǎo)航場景:如果用戶駕車出行,上車前,在手機(jī)上規(guī)劃好導(dǎo)航路線;上車后,導(dǎo)航自動
遷移到車機(jī)和車載音箱;下車后,導(dǎo)航自動遷移回手機(jī)。如果用戶騎車出行,在手機(jī)上
規(guī)劃好導(dǎo)航路線,騎行時(shí)手表可以接續(xù)導(dǎo)航。 - 外賣場景:在手機(jī)上點(diǎn)外賣后,可以將訂單信息遷移到手表上,隨時(shí)查看外賣的配送狀
態(tài)。
流轉(zhuǎn)架構(gòu)
- HarmonyOS流轉(zhuǎn)提供了一組API庫,可讓用戶應(yīng)用程序更輕松、快捷地完成流轉(zhuǎn)體驗(yàn)。
HarmonyOS流轉(zhuǎn)架構(gòu)有如下優(yōu)勢:- 統(tǒng)一流轉(zhuǎn)管理UI,支持設(shè)備發(fā)現(xiàn)、選擇以及任務(wù)管理;
- 支持遠(yuǎn)程服務(wù)調(diào)用等能力,可輕松設(shè)計(jì)業(yè)務(wù);
- 支持多個應(yīng)用同時(shí)進(jìn)行流轉(zhuǎn);
- 支持不同形態(tài)設(shè)備,如手機(jī)、平板、TV、手表等。
核心模塊
- 流轉(zhuǎn)任務(wù)管理服務(wù):在流轉(zhuǎn)發(fā)起端,接受用戶應(yīng)用程序注冊,提供流轉(zhuǎn)入口、狀態(tài)顯示、退出流轉(zhuǎn)等管理能力。
- 分布式任務(wù)調(diào)度:提供遠(yuǎn)程服務(wù)啟動、遠(yuǎn)程服務(wù)連接、遠(yuǎn)程遷移等能力,并通過不同能力組合,支撐用戶應(yīng)用程序完成跨端遷移或多端協(xié)同的業(yè)務(wù)體驗(yàn)。
- 分布式安全:提供端到端的加密通道,為用戶應(yīng)用程序提供安全的跨端傳輸機(jī)制,保證“正確的人,通過正確的設(shè)備,正確地使用數(shù)據(jù)”。
- 分布式軟總線:使用基于手機(jī)、平板、智能穿戴、智慧屏等分布式設(shè)備的統(tǒng)一通信基座,為設(shè)備之間的互聯(lián)互通提供統(tǒng)一的分布式通信能力。
跨端遷移關(guān)鍵流程
- 流轉(zhuǎn)準(zhǔn)備:設(shè)備A上的應(yīng)用向流轉(zhuǎn)任務(wù)管理服務(wù)注冊一個流轉(zhuǎn)回調(diào);
- 流轉(zhuǎn)開始:設(shè)備A上的應(yīng)用通過調(diào)用分布式任務(wù)調(diào)度的能力,實(shí)現(xiàn)應(yīng)用遷移:
- 系統(tǒng)回調(diào)設(shè)備A上FA的onStartContinuation()方法,以確認(rèn)當(dāng)前FA是否可以開始遷移,onStartContinuation方法返回true,表示當(dāng)前FA可以開始遷移;
- 如果可以開始遷移,則系統(tǒng)回調(diào)設(shè)備A上FA的onSaveData()方法,以便保存遷移后恢復(fù)狀態(tài)必須的據(jù),數(shù)據(jù)保存在函數(shù)的savedData參數(shù)中;
- 如果保存數(shù)據(jù)成功,則系統(tǒng)在設(shè)備B上啟動同一個FA,然后回調(diào)onRestoreData()方法,傳遞設(shè)備A上FA保存的數(shù)據(jù),應(yīng)用可在此方法恢復(fù)業(yè)務(wù)狀態(tài);此后設(shè)備B上此FA從onInit()開始其生命周期回調(diào);
- 系統(tǒng)回調(diào)設(shè)備A上FA的onCompleteContinuation()方法,通知應(yīng)用遷移成功。遷移操作完成,參數(shù)code返回結(jié)果。
多端協(xié)同關(guān)鍵流程
- 流轉(zhuǎn)進(jìn)行:設(shè)備A上的應(yīng)用通過調(diào)用分布式任務(wù)調(diào)度的能力,如startAbility,connectAbility等,向設(shè)備B的應(yīng)用發(fā)起多端協(xié)同。
- 協(xié)同開始
- 設(shè)備A調(diào)用startAbility啟動設(shè)備B的FA和PA;
- 設(shè)備A調(diào)用connectAbility連接設(shè)備B的PA:
- 在設(shè)備A上通過本地應(yīng)用提供的連接按鈕,連接設(shè)備B上指定的PA。
- 連接后,通過其他功能相關(guān)按鈕實(shí)現(xiàn)控制對端PA的能力。通過連接關(guān)系,開發(fā)者可以實(shí)現(xiàn)跨設(shè)備的同步服務(wù)調(diào)度,實(shí)現(xiàn)如大型計(jì)算任務(wù)互助等價(jià)值場景。
- 協(xié)同結(jié)束
- 設(shè)備A調(diào)用disconnectAbility斷開與設(shè)備B的PA的連接:將之前已連接的PA斷開連接;
- 設(shè)備A調(diào)用stopAbility關(guān)閉設(shè)備B的PA:關(guān)閉設(shè)備B上指定的PA。
-
約束與限制
-
開發(fā)者需要在Intent中設(shè)置支持分布式的標(biāo)記(例如:Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示該應(yīng)用支持分布式調(diào)度),否則將無法獲得分布式能力。
-
開發(fā)者通過在config.json中的reqPermissions字段里添加多設(shè)備協(xié)同訪問的權(quán)限申請:三方應(yīng)用使用{“name”: “ohos.permission.DISTRIBUTED_DATASYNC”}。
-
分布式任務(wù)調(diào)度
- 開發(fā)者在應(yīng)用中集成分布式調(diào)度能力,通過調(diào)用指定能力的分布式接口,實(shí)現(xiàn)跨設(shè)備能力調(diào)度。根據(jù)Ability模板及意圖的不同,分布式任務(wù)調(diào)度向開發(fā)者提供以下六種能力:
- 啟動遠(yuǎn)程FA
- 啟動遠(yuǎn)程PA
- 關(guān)閉遠(yuǎn)程PA
- 連接遠(yuǎn)程PA
- 斷開連接遠(yuǎn)程PA
- FA跨設(shè)備遷移
連接遠(yuǎn)程PA
- connectAbility(Intent intent, IAbilityConnection conn)接口提供連接指定設(shè)備上PA的能力,Intent中指定待連接PA的設(shè)備deviceId、bundleName和abilityName。當(dāng)連接成功后,通過在conn定義onAbilityConnectDone回調(diào)中獲取對端PA的服務(wù)代理,兩者的連接關(guān)系則由conn維護(hù)。具體的參數(shù)定義如下表所示:
啟動遠(yuǎn)程FA/PA
- startAbility(Intent intent)接口提供啟動指定設(shè)備上FA和PA的能力,Intent中指定待啟動FA/PA的設(shè)備deviceId、bundleName和abilityName。具體參數(shù)定義如下:
- 分布式調(diào)度平臺還會提供與上述功能相對應(yīng)的斷開遠(yuǎn)程PA的連接和關(guān)閉遠(yuǎn)程PA的接口,相關(guān)的參數(shù)與連接、啟動的接口類似;
- 斷開遠(yuǎn)程PA連接:disconnectAbility(IAbilityConnection conn);
- 關(guān)閉遠(yuǎn)程PA:stopAbility(Intent intent)。
遷移FA
- continueAbility()接口提供將本地FA遷移到指定設(shè)備上的能力。需要實(shí)現(xiàn)IAbilityContinuation及其方法,才可以實(shí)現(xiàn)FA遷移。IAbilityContinuation的方法有:
- onStartContinuation():Page請求遷移后,系統(tǒng)首先回調(diào)此方法,開發(fā)者可以在此回調(diào)中決策當(dāng)前是否可以執(zhí)行遷移,比如,彈框讓用戶確認(rèn)是否開始遷移;
- onSaveData():如果onStartContinuation()返回true,則系統(tǒng)回調(diào)此方法,開發(fā)者在此回調(diào)中保存必須傳遞到另外設(shè)備上以便恢復(fù)Page狀態(tài)的數(shù)據(jù)。
接口IAbilityContinuation的方法
- onRestoreData():源側(cè)設(shè)備上Page完成保存數(shù)據(jù)后,系統(tǒng)在目標(biāo)側(cè)設(shè)備上回調(diào)此方法,開發(fā)者在此回調(diào)中接受用于恢復(fù)Page狀態(tài)的數(shù)據(jù)。注意,在目標(biāo)側(cè)設(shè)備上的Page會重新啟動其生命周期,無論其啟動模式如何配置。且系統(tǒng)回調(diào)此方法的時(shí)機(jī)在onStart()之前。
- onCompleteContinuation():目標(biāo)側(cè)設(shè)備上恢復(fù)數(shù)據(jù)一旦完成,系統(tǒng)就會在源側(cè)設(shè)備上回調(diào)Page的此方法,以便通知應(yīng)用遷移流程已結(jié)束。開發(fā)者可以在此檢查遷移結(jié)果是否成功,并在此處理遷移結(jié)束的動作,例如,應(yīng)用可以在遷移完成后終止自身生命周期。
跨端遷移功能開發(fā)
-
跨設(shè)備遷移(下文簡稱“遷移”)支持將Page在同一用戶的不同設(shè)備間遷移,以便支持用戶無縫切換的訴求。以Page從設(shè)備A遷移到設(shè)備B為例,遷移動作主要步驟如下:
- 設(shè)備A上的Page請求遷移;
- HarmonyOS處理遷移任務(wù),并回調(diào)設(shè)備A上Page的保存數(shù)據(jù)方法,用于保存遷移必須的數(shù)據(jù);
- HarmonyOS在設(shè)備B上啟動同一個Page,并回調(diào)其恢復(fù)數(shù)據(jù)方法。
-
以下詳細(xì)代碼說明如何開發(fā)具有遷移功能的Page。
tryContinueAbility: async function() {let result = await FeatureAbility.continueAbility();console.info("result:" + JSON.stringify(result)); },onStartContinuation() {console.info("onStartContinuation");return true;},onCompleteContinuation(code) {console.info("CompleteContinuation: code = " + code);},onSaveData(saveData) {var data = this.continueAbilityData;Object.assign(saveData, data)},onRestoreData(restoreData) {this.continueAbilityData = restoreData;},- 遷移運(yùn)行效果
多端協(xié)同功能開發(fā)
-
電視機(jī)遙控器
啟動遙控器
-
點(diǎn)擊TV端主界面搜索框,會出現(xiàn)選擇手機(jī)遙控器的彈框。用戶選擇需要的手機(jī)遙控設(shè)備,點(diǎn)擊后會立刻拉起手機(jī)遙控輸入界面。
public void openRemoteAbility(String deviceId, String bundleName, String abilityName) { Intent intent = new Intent(); intent.setParam("localDeviceId", localDeviceId); Operation operation = new Intent.OperationBuilder() .withDeviceId(deviceId) .withBundleName(bundleName) .withAbilityName(abilityName) .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) .build(); intent.setOperation(operation); abilitySlice.startAbility(intent); }
連接遠(yuǎn)程智慧屏
-
遙控界面FA在啟動過程中,通過initConnManager()方法,與TV端RemoteService建立連接。
Intent connectPaIntent = new Intent();Operation operation = new Intent.OperationBuilder()bundlename... .build();connectPaIntent.setOperation(operation);conn = new IAbilityConnection() {@Overridepublic void onAbilityConnectDone(ElementName elementName, IRemoteObject remote, int resultCode) { proxy = new MyRemoteProxy(remote); }@Override public void onAbilityDisconnectDone(ElementName elementName, int resultCode) {proxy = null;}}; context.connectAbility(connectPaIntent, conn); } }
遙控器與智慧屏交互
-
服務(wù)端的RemoteService為Service Ability,專門處理發(fā)送到服務(wù)端的客戶請求。
RemoteService處理請求是通過RemoteObject的子類MyRemote實(shí)現(xiàn)的。 public class MyRemote extends RemoteObject implements IRemoteBroker {private MyRemote() {}@Overridepublic IRemoteObject asObject() {return this;}@Overridepublic boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {LogUtils.info(TAG, "===onRemoteRequest......");int requestType = data.readInt();String inputString = data.readString();sendEvent(requestType, inputString);return true; } }
本章總結(jié)
- HarmonyOS系統(tǒng)中的流轉(zhuǎn)架構(gòu)是實(shí)現(xiàn)HarmonyOS重要特性“超級終端”的必要條件,
- 首先介紹了流轉(zhuǎn)架構(gòu)的核心組件,接著介紹了流轉(zhuǎn)架構(gòu)的兩種實(shí)現(xiàn)方式跨端遷移和多端協(xié)同的關(guān)鍵流程,最后按照這些流程實(shí)現(xiàn)了兩種流轉(zhuǎn)架構(gòu)。
- 其中,分布式協(xié)同的實(shí)現(xiàn)案例-·分布式遙控器充分體現(xiàn)了“超級終端”的意義所在
eadString();
sendEvent(requestType, inputString);
return true;
}
}
總結(jié)
以上是生活随笔為你收集整理的CH8-HarmonyOS流转架构解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NVIDIA显示设置不可以用,桌面右击选
- 下一篇: 智能指针用法及其代码详解