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