HarmonyOS “跨設備遷移”原理解析
什么是HarmonyOS“跨設備遷移”?
HarmonyOS“跨設備遷移”是指將承載業務的Page在同一用戶的不同設備間遷移,以便支持用戶業務無縫切換的訴求。“跨設備遷移”實現了業務跨設備流轉功能,打破業務受限單設備的壁壘。
典型應用場景舉例:
圖1 設備A完成郵件編寫并選擇附件,流轉到另一設備
圖2 設備B彈出郵件界面,可繼續完成郵件編寫
HarmonyOS“跨設備遷移”的技術原理
HarmonyOS“跨設備遷移”需要用到一項關鍵技術——“分布式任務調度”。
分布式任務調度
“跨設備遷移”依賴HarmonyOS系統中分布式任務調度的“業務遷移能力”。
圖3 分布式任務調度所處位置
“分布式任務調度”基于分布式軟總線、分布式數據管理、分布式Profile和分布式安全認證這四項技術特性,構建統一的分布式服務管理(發現、同步、注冊、調用)機制,支持對跨設備的應用進行遠程啟動、遠程調用、遠程連接以及遷移等操作。
圖4 分布式任務調度
● 分布式軟總線實現了近場設備間統一的分布式通信能力管理,提供不區分鏈路的設備發現、連接、組網和傳輸能力。開發者可無需關注設備間組網方式與底層協議,集中精力實現業務邏輯功能。
● 分布式數據管理中的數據同步能力可實現組網內的設備信息共享實時同步,如設備上下線、設備信息列表等,方便多設備信息實時同步。
● 分布式Profile實現多設備Profile的統一查詢、訂閱能力,拉通多設備之間的管理。
● 分布式安全認證提供應用完整性保護、應用權限管理、設備認證、密鑰管理等服務,為業務提供安全保障基礎。
分布式任務調度基于以上技術特性基座,構建統一的分布式服務管理機制,完成了分布式組網內設備中的系統服務信息同步及管理,包括服務注冊、服務發現、服務同步和服務調度。
在業務發起“跨設備遷移”請求時,分布式調度系統根據調度決策機制選擇目標設備,并獲取對應設備的系統服務信息,在系統服務成功調度后,向目標設備發起遠程啟動、遠程調用、遠程連接和遠程遷移,由對應設備的分布式任務調度系統完成本地化的任務執行。
HarmonyOS“跨設備遷移”的具體實現流程
HarmonyOS“跨設備遷移”依賴“Ability”實現,這里我們簡單介紹一下“Ability”。
Ability
Ability是應用所具備能力的抽象,HarmonyOS支持應用以Ability為單位進行部署。業務“跨設備遷移”的基礎粒度也是Ability,具體實現是在不同設備間同一應用的同名Ability之間進行遷移。
● Ability概述
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-ability-overview-0000000000029852
HarmonyOS的應用由一個或多個FA(Feature Ability)或PA(Particle Ability)組成。
圖5 Ability分類
● FA有UI界面,提供與用戶交互的能力
FA僅支持Page Ability,一個Page實例可以包含一組相關頁面,每個頁面用一個AbilitySlice實例表示。
圖6 Page組成
● Page Ability基本概念
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-concept-0000000000033573
● PA無UI界面,提供后臺運行任務的能力以及統一的數據訪問抽象
PA支持Service Ability和Data Ability:
Service Ability:用于提供后臺運行任務的能力。
Data Ability:用于對外部提供統一的數據訪問抽象。
Ability的生命周期主要用于Page實例的狀態機管理,系統管理或用戶操作等行為均會引起Page實例在其生命周期的不同狀態之間進行轉換。Ability Class提供的回調機制能夠讓Page及時感知外界變化,從而正確地應對狀態變化。
● Page Ability生命周期
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-lifecycle-0000000000029840
“跨設備遷移”的處理依賴Ability的生命周期管理來完成Page的狀態切換,同時Page在生命周期回調中處理數據的保存與恢復。具體流程如下圖所示:
圖7 Ability生命周期流程
● onStart()
當系統首次創建Page實例時觸發。應用須重寫該方法,并在此初始化配置為展示AbilitySlice。Page在此后進入INACTIVE狀態,用戶不可交互。
• onActive()
當Page從INACTIVE狀態切換到前臺時觸發。Page在此之后進入ACTIVE狀態,該狀態下,應用與用戶處于可交互的狀態。
• onInactive()
當Page即將進入不可交互狀態時會被觸發,Page在此之后進入INACTIVE狀態,應用與用戶不可交互。
• onBackground()
當Page不再對用戶可見時觸發。Page在此之后進入BACKGROUND狀態。
• onForeground()
當Page從BACKGROUND狀態重新回到前臺時觸發。Page在此之后回到INACTIVE狀態。
• onStop()
當系統將要銷毀Page時觸發。
遷移流程
圍繞Ability的生命周期,我們來看看業務“跨設備遷移”的具體流程。
業務“跨設備遷移”的本質即通過分布式組網把一個設備的“Ability運行狀態”遷移到另外一臺設備上。
程序中“跨設備遷移”通過調用Page Ability的遷移接口ContinueAbility,將設備A的業務無縫遷移到指定設備B中。其中,支持遷移的Page以及此Page所包含的所有AbilitySlice必須實現IAbilityContinuation接口。具體接口代碼如下:
- public interface IAbilityContinuation {
- //是否可遷移
- boolean onStartContinuation();
- //保存數據
- boolean onSaveData(IntentParams var1);
- //恢復數據
- boolean onRestoreData(IntentParams var1);
- //遷移完成
- void onCompleteContinuation(int var1);
- default void onRemoteTerminated() {
- throw new RuntimeException("Stub!");
- }
- }
圖8 業務“跨設備遷移”流程
“跨設備遷移”關鍵步驟:
“跨設備遷移”數據流轉過程:
HarmonyOS“跨設備遷移”動手實例
我們為大家帶來一個辦公場景下“基于分布式的協同郵件編輯”Demo,作為“跨設備遷移”應用的開發實例。該實例通過模擬不同設備間協同的郵件內容編輯來做一個“內容”跨設備遷移的演示。
目前該Demo已在HarmonyOS官網Codelabs中上線,感興趣的同學可以參考其具體流程,動手開發一個“跨設備遷移”郵箱Demo。
● Codelabs鏈接
https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/Distributed-Mail
通過這一系列的解析,開發者們是不是對HarmonyOS“跨設備遷移”技術有了更深的了解,未來我們還將為大家帶來更多HarmonyOS相關技術解讀。