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



























 
 
 






 
 
 
 