跨設(shè)備遷移(下文簡(jiǎn)稱“遷移”)支持將 Page 在同一用戶的不同設(shè)備間遷移,以便支持用戶無縫切換的訴求。以 Page 從設(shè)備 A 遷移到設(shè)備 B 為例,遷移動(dòng)作主要步驟如下:
- 設(shè)備 A 上的 Page 請(qǐng)求遷移。
- HarmonyOS 處理遷移任務(wù),并回調(diào)設(shè)備 A 上 Page 的保存數(shù)據(jù)方法,用于保存遷移必須的數(shù)據(jù)。
-
HarmonyOS 在設(shè)備 B 上啟動(dòng)同一個(gè) Page,并回調(diào)其恢復(fù)數(shù)據(jù)方法。
開發(fā)者可以參考以下詳細(xì)步驟開發(fā)具有遷移功能的 Page。
實(shí)現(xiàn) IAbilityContinuation 接口
onStartContinuation()
Page 請(qǐng)求遷移后,系統(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ù)。
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 會(huì)重新啟動(dòng)其生命周期,無論其啟動(dòng)模式如何配置。且系統(tǒng)回調(diào)此方法的時(shí)機(jī)在 onStart() 之前。
onCompleteContinuation()
目標(biāo)側(cè)設(shè)備上恢復(fù)數(shù)據(jù)一旦完成,系統(tǒng)就會(huì)在源側(cè)設(shè)備上回調(diào) Page 的此方法,以便通知應(yīng)用遷移流程已結(jié)束。開發(fā)者可以在此檢查遷移結(jié)果是否成功,并在此處理遷移結(jié)束的動(dòng)作,例如,應(yīng)用可以在遷移完成后終止自身生命周期。
onRemoteTerminated()
如果開發(fā)者使用 continueAbilityReversibly() 而不是 continueAbility(),則此后可以在源側(cè)設(shè)備上使用 reverseContinueAbility() 進(jìn)行回遷。這種場(chǎng)景下,相當(dāng)于同一個(gè) Page(的兩個(gè)實(shí)例)同時(shí)在兩個(gè)設(shè)備上運(yùn)行,遷移完成后,如果目標(biāo)側(cè)設(shè)備上 Page 因任何原因終止,則源側(cè) Page 通過此回調(diào)接收終止通知。
說明
一個(gè)應(yīng)用可能包含多個(gè) Page,僅支持遷移的 Page 需要實(shí)現(xiàn) IAbilityContinuation 接口。同時(shí),此 Page 所包含的所有 AbilitySlice 也需要實(shí)現(xiàn)此接口。
請(qǐng)求遷移
實(shí)現(xiàn) IAbilityContinuation 的 Page 可以在其生命周期內(nèi),調(diào)用 continueAbility() 或 continueAbilityReversibly() 請(qǐng)求遷移。兩者的區(qū)別是,通過后者發(fā)起的遷移此后可以進(jìn)行回遷。
try {
continueAbility();
} catch (IllegalStateException e) {
// Maybe another continuation in progress.
...
}
以 Page 從設(shè)備 A 遷移到設(shè)備B為例,詳細(xì)的流程如下:
1.設(shè)備 A 上的 Page 請(qǐng)求遷移。
2.系統(tǒng)回調(diào)設(shè)備 A 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實(shí)例的 IAbilityContinuation.onStartContinuation() 方法,以確認(rèn)當(dāng)前是否可以立即遷移。
3.如果可以立即遷移,則系統(tǒng)回調(diào)設(shè)備 A 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實(shí)例的 IAbilityContinuation.onSaveData() 方法,以便保存遷移后恢復(fù)狀態(tài)必須的數(shù)據(jù)。
4.如果保存數(shù)據(jù)成功,則系統(tǒng)在設(shè)備 B 上啟動(dòng)同一個(gè) Page ,并恢復(fù) AbilitySlice 棧,然后回調(diào) IAbilityContinuation.onRestoreData() 方法,傳遞此前保存的數(shù)據(jù);此后設(shè)備 B 上此 Page 從 onStart() 開始其生命周期回調(diào)。
6.系統(tǒng)回調(diào)設(shè)備 A 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實(shí)例的 IAbilityContinuation.onCompleteContinuation() 方法,通知數(shù)據(jù)恢復(fù)成功與否。
請(qǐng)求回遷
使用 continueAbilityReversibly() 請(qǐng)求遷移并完成后,源側(cè)設(shè)備上已遷移的 Page 可以發(fā)起回遷,以便使用戶活動(dòng)重新回到此設(shè)備。
try {
reverseContinueAbility();
} catch (IllegalStateException e) {
// Maybe another continuation in progress.
...
}
以Page從設(shè)備A遷移到設(shè)備B后并請(qǐng)求回遷為例,詳細(xì)的流程如下:
1.設(shè)備 A 上的 Page 請(qǐng)求回遷。
2.系統(tǒng)回調(diào)設(shè)備 B 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實(shí)例的 IAbilityContinuation.onStartContinuation() 方法,以確認(rèn)當(dāng)前是否可以立即遷移。
3.如果可以立即遷移,則系統(tǒng)回調(diào)設(shè)備 B 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實(shí)例的 IAbilityContinuation.onSaveData() 方法,以便保存回遷后恢復(fù)狀態(tài)必須的數(shù)據(jù)。
4.如果保存數(shù)據(jù)成功,則系統(tǒng)在設(shè)備 A 上 Page 恢復(fù) AbilitySlice 棧,然后回調(diào) IAbilityContinuation.onRestoreData() 方法,傳遞此前保存的數(shù)據(jù)。
5.如果數(shù)據(jù)恢復(fù)成功,則系統(tǒng)終止設(shè)備 B 上 Page 的生命周期。
-
鴻蒙
+關(guān)注
關(guān)注
59文章
2574瀏覽量
43901 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2148瀏覽量
32547
發(fā)布評(píng)論請(qǐng)先 登錄
AKI跨語言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT
鴻蒙OS適用的全場(chǎng)景到底什么意思?
鴻蒙os系統(tǒng)是什么意思 鴻蒙os系統(tǒng)有什么作用
通過HarmonyOS分布式能力實(shí)現(xiàn)任務(wù)的跨設(shè)備遷移設(shè)計(jì)資料分享
HarmonyOS應(yīng)用開發(fā)-DiseributedVideoCodelab跨設(shè)備視頻遷移
華為鴻蒙OS正式發(fā)布 它的安全性能如何
華為鴻蒙OS又有嚇人的設(shè)計(jì) 蘋果的Carplay在鴻蒙OS面前真的自嘆不如
鴻蒙OS與Lite OS的區(qū)別是什么
華為鴻蒙OS系統(tǒng)2.0有哪些優(yōu)勢(shì)?具備哪些功能?
什么是HarmonyOS“跨設(shè)備遷移”?
鴻蒙OS 分布式任務(wù)調(diào)度
鴻蒙OS和開源鴻蒙什么關(guān)系?

鴻蒙開發(fā):應(yīng)用組件跨設(shè)備交互(流轉(zhuǎn))【跨端遷移】

評(píng)論