CH8-HarmonyOS流转架构解析
生活随笔
收集整理的這篇文章主要介紹了
CH8-HarmonyOS流转架构解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 目標
- 核心概念
- 流轉架構特性
- Ability的調度
- 流轉應用場景
- 流轉架構
- 核心模塊
- 跨端遷移關鍵流程
- 多端協同關鍵流程
- 分布式任務調度
- 連接遠程PA
- 啟動遠程FA/PA
- 遷移FA
- 接口IAbilityContinuation的方法
- 跨端遷移功能開發
- 多端協同功能開發
- 啟動遙控器
- 連接遠程智慧屏
- 遙控器與智慧屏交互
- 本章總結
前言
- 物聯網時代的核心是具備互聯互通能力的智能設備,目前智能市場的現狀遠不能達到預定的目標。
- 現實的工作生活場景是用戶擁有的設備越來越多,每個設備都能在適合的場景下提供良好的體驗,例如:手表可以提供及時的信息查看能力,電視可以帶來沉浸的觀影體驗。
- 但是每個設備也有使用場景的局限,例如:在電視上輸入文本相對手機來說是非常糟糕的體驗。因此每個設備都成為“設備孤島”,使用頻率和效率低下。
目標
- 理解流轉架構的工作原理和工作過程,
- 能夠使用跨端流轉功能和多端協同功能來開發具有多端交互能力的分布式APP。
核心概念
- 跨端遷移:一種實現用戶應用程序流轉的技術方案,指在A端運行的FA遷移到B端上,完成遷移后, B端FA繼續任務,而A端應用退出。
- 多端協同:一種實現用戶應用程序流轉的技術方案,指多端上的不同FA/PA同時運行、或者交替運行實現完整的業務;或者,多端上的相同FA/PA同時運行實現完整的業務。多個設備作為一個整體為用戶提供比單設備更加高效、沉浸的體驗。
流轉架構特性
- 在HarmonyOS中,流轉泛指多設備分布式操作。流轉能力打破設備界限,多設備聯動,使用戶應用程序可分可合、可流轉。
- 流轉架構對搭載HarmonyOS的多設備構筑的“超級虛擬終端”提供統一的組件管理能力,為應用屏蔽硬件差異;
- 支持遠程啟動、遠程調用、業務無縫遷移等分布式任務。
- 流轉架構在底層實現Ability(分布式操作的基本組件)跨設備的啟動/關閉、連接及斷開連接以及遷移等能力,實現跨設備的組件管理。
Ability的調度
- 啟動和關閉:向開發者提供管理遠程Ability的能力,即支持啟動Page模板的Ability,以
及啟動、關閉Service和Data模板的Ability。 - 連接和斷開連接:向開發者提供跨設備控制服務(Service和Data模板的Ability)的能力,
開發者可以通過與遠程服務連接及斷開連接實現獲取或注銷跨設備管理服務的對象,達到和本地一致的服務調度。 - 遷移能力:向開發者提供跨設備業務的無縫遷移能力,開發者可以通過調用Page模板
Ability的遷移接口,將本地業務無縫遷移到指定設備中,打通設備間壁壘。
流轉應用場景
- 導航場景:如果用戶駕車出行,上車前,在手機上規劃好導航路線;上車后,導航自動
遷移到車機和車載音箱;下車后,導航自動遷移回手機。如果用戶騎車出行,在手機上
規劃好導航路線,騎行時手表可以接續導航。 - 外賣場景:在手機上點外賣后,可以將訂單信息遷移到手表上,隨時查看外賣的配送狀
態。
流轉架構
- HarmonyOS流轉提供了一組API庫,可讓用戶應用程序更輕松、快捷地完成流轉體驗。
HarmonyOS流轉架構有如下優勢:- 統一流轉管理UI,支持設備發現、選擇以及任務管理;
- 支持遠程服務調用等能力,可輕松設計業務;
- 支持多個應用同時進行流轉;
- 支持不同形態設備,如手機、平板、TV、手表等。
核心模塊
- 流轉任務管理服務:在流轉發起端,接受用戶應用程序注冊,提供流轉入口、狀態顯示、退出流轉等管理能力。
- 分布式任務調度:提供遠程服務啟動、遠程服務連接、遠程遷移等能力,并通過不同能力組合,支撐用戶應用程序完成跨端遷移或多端協同的業務體驗。
- 分布式安全:提供端到端的加密通道,為用戶應用程序提供安全的跨端傳輸機制,保證“正確的人,通過正確的設備,正確地使用數據”。
- 分布式軟總線:使用基于手機、平板、智能穿戴、智慧屏等分布式設備的統一通信基座,為設備之間的互聯互通提供統一的分布式通信能力。
跨端遷移關鍵流程
- 流轉準備:設備A上的應用向流轉任務管理服務注冊一個流轉回調;
- 流轉開始:設備A上的應用通過調用分布式任務調度的能力,實現應用遷移:
- 系統回調設備A上FA的onStartContinuation()方法,以確認當前FA是否可以開始遷移,onStartContinuation方法返回true,表示當前FA可以開始遷移;
- 如果可以開始遷移,則系統回調設備A上FA的onSaveData()方法,以便保存遷移后恢復狀態必須的據,數據保存在函數的savedData參數中;
- 如果保存數據成功,則系統在設備B上啟動同一個FA,然后回調onRestoreData()方法,傳遞設備A上FA保存的數據,應用可在此方法恢復業務狀態;此后設備B上此FA從onInit()開始其生命周期回調;
- 系統回調設備A上FA的onCompleteContinuation()方法,通知應用遷移成功。遷移操作完成,參數code返回結果。
多端協同關鍵流程
- 流轉進行:設備A上的應用通過調用分布式任務調度的能力,如startAbility,connectAbility等,向設備B的應用發起多端協同。
- 協同開始
- 設備A調用startAbility啟動設備B的FA和PA;
- 設備A調用connectAbility連接設備B的PA:
- 在設備A上通過本地應用提供的連接按鈕,連接設備B上指定的PA。
- 連接后,通過其他功能相關按鈕實現控制對端PA的能力。通過連接關系,開發者可以實現跨設備的同步服務調度,實現如大型計算任務互助等價值場景。
- 協同結束
- 設備A調用disconnectAbility斷開與設備B的PA的連接:將之前已連接的PA斷開連接;
- 設備A調用stopAbility關閉設備B的PA:關閉設備B上指定的PA。
-
約束與限制
-
開發者需要在Intent中設置支持分布式的標記(例如:Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示該應用支持分布式調度),否則將無法獲得分布式能力。
-
開發者通過在config.json中的reqPermissions字段里添加多設備協同訪問的權限申請:三方應用使用{“name”: “ohos.permission.DISTRIBUTED_DATASYNC”}。
-
分布式任務調度
- 開發者在應用中集成分布式調度能力,通過調用指定能力的分布式接口,實現跨設備能力調度。根據Ability模板及意圖的不同,分布式任務調度向開發者提供以下六種能力:
- 啟動遠程FA
- 啟動遠程PA
- 關閉遠程PA
- 連接遠程PA
- 斷開連接遠程PA
- FA跨設備遷移
連接遠程PA
- connectAbility(Intent intent, IAbilityConnection conn)接口提供連接指定設備上PA的能力,Intent中指定待連接PA的設備deviceId、bundleName和abilityName。當連接成功后,通過在conn定義onAbilityConnectDone回調中獲取對端PA的服務代理,兩者的連接關系則由conn維護。具體的參數定義如下表所示:
啟動遠程FA/PA
- startAbility(Intent intent)接口提供啟動指定設備上FA和PA的能力,Intent中指定待啟動FA/PA的設備deviceId、bundleName和abilityName。具體參數定義如下:
- 分布式調度平臺還會提供與上述功能相對應的斷開遠程PA的連接和關閉遠程PA的接口,相關的參數與連接、啟動的接口類似;
- 斷開遠程PA連接:disconnectAbility(IAbilityConnection conn);
- 關閉遠程PA:stopAbility(Intent intent)。
遷移FA
- continueAbility()接口提供將本地FA遷移到指定設備上的能力。需要實現IAbilityContinuation及其方法,才可以實現FA遷移。IAbilityContinuation的方法有:
- onStartContinuation():Page請求遷移后,系統首先回調此方法,開發者可以在此回調中決策當前是否可以執行遷移,比如,彈框讓用戶確認是否開始遷移;
- onSaveData():如果onStartContinuation()返回true,則系統回調此方法,開發者在此回調中保存必須傳遞到另外設備上以便恢復Page狀態的數據。
接口IAbilityContinuation的方法
- onRestoreData():源側設備上Page完成保存數據后,系統在目標側設備上回調此方法,開發者在此回調中接受用于恢復Page狀態的數據。注意,在目標側設備上的Page會重新啟動其生命周期,無論其啟動模式如何配置。且系統回調此方法的時機在onStart()之前。
- onCompleteContinuation():目標側設備上恢復數據一旦完成,系統就會在源側設備上回調Page的此方法,以便通知應用遷移流程已結束。開發者可以在此檢查遷移結果是否成功,并在此處理遷移結束的動作,例如,應用可以在遷移完成后終止自身生命周期。
跨端遷移功能開發
-
跨設備遷移(下文簡稱“遷移”)支持將Page在同一用戶的不同設備間遷移,以便支持用戶無縫切換的訴求。以Page從設備A遷移到設備B為例,遷移動作主要步驟如下:
- 設備A上的Page請求遷移;
- HarmonyOS處理遷移任務,并回調設備A上Page的保存數據方法,用于保存遷移必須的數據;
- HarmonyOS在設備B上啟動同一個Page,并回調其恢復數據方法。
-
以下詳細代碼說明如何開發具有遷移功能的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;},- 遷移運行效果
多端協同功能開發
-
電視機遙控器
啟動遙控器
-
點擊TV端主界面搜索框,會出現選擇手機遙控器的彈框。用戶選擇需要的手機遙控設備,點擊后會立刻拉起手機遙控輸入界面。
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); }
連接遠程智慧屏
-
遙控界面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); } }
遙控器與智慧屏交互
-
服務端的RemoteService為Service Ability,專門處理發送到服務端的客戶請求。
RemoteService處理請求是通過RemoteObject的子類MyRemote實現的。 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; } }
本章總結
- HarmonyOS系統中的流轉架構是實現HarmonyOS重要特性“超級終端”的必要條件,
- 首先介紹了流轉架構的核心組件,接著介紹了流轉架構的兩種實現方式跨端遷移和多端協同的關鍵流程,最后按照這些流程實現了兩種流轉架構。
- 其中,分布式協同的實現案例-·分布式遙控器充分體現了“超級終端”的意義所在
eadString();
sendEvent(requestType, inputString);
return true;
}
}
總結
以上是生活随笔為你收集整理的CH8-HarmonyOS流转架构解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NVIDIA显示设置不可以用,桌面右击选
- 下一篇: 智能指针用法及其代码详解