跨設備遷移(下文簡稱“遷移”)支持將 Page 在同一用戶的不同設備間遷移,以便支持用戶無縫切換的訴求。以 Page 從設備 A 遷移到設備 B 為例,遷移動作主要步驟如下:
- 設備 A 上的 Page 請求遷移。
- HarmonyOS 處理遷移任務,并回調設備 A 上 Page 的保存數據方法,用于保存遷移必須的數據。
-
HarmonyOS 在設備 B 上啟動同一個 Page,并回調其恢復數據方法。
開發者可以參考以下詳細步驟開發具有遷移功能的 Page。
實現 IAbilityContinuation 接口
onStartContinuation()
Page 請求遷移后,系統首先回調此方法,開發者可以在此回調中決策當前是否可以執行遷移,比如,彈框讓用戶確認是否開始遷移。
onSaveData()
如果 onStartContinuation() 返回 true ,則系統回調此方法,開發者在此回調中保存必須傳遞到另外設備上以便恢復 Page 狀態的數據。
onRestoreData()
源側設備上 Page 完成保存數據后,系統在目標側設備上回調此方法,開發者在此回調中接受用于恢復 Page 狀態的數據。注意,在目標側設備上的 Page 會重新啟動其生命周期,無論其啟動模式如何配置。且系統回調此方法的時機在 onStart() 之前。
onCompleteContinuation()
目標側設備上恢復數據一旦完成,系統就會在源側設備上回調 Page 的此方法,以便通知應用遷移流程已結束。開發者可以在此檢查遷移結果是否成功,并在此處理遷移結束的動作,例如,應用可以在遷移完成后終止自身生命周期。
onRemoteTerminated()
如果開發者使用 continueAbilityReversibly() 而不是 continueAbility(),則此后可以在源側設備上使用 reverseContinueAbility() 進行回遷。這種場景下,相當于同一個 Page(的兩個實例)同時在兩個設備上運行,遷移完成后,如果目標側設備上 Page 因任何原因終止,則源側 Page 通過此回調接收終止通知。
說明
一個應用可能包含多個 Page,僅支持遷移的 Page 需要實現 IAbilityContinuation 接口。同時,此 Page 所包含的所有 AbilitySlice 也需要實現此接口。
請求遷移
實現 IAbilityContinuation 的 Page 可以在其生命周期內,調用 continueAbility() 或 continueAbilityReversibly() 請求遷移。兩者的區別是,通過后者發起的遷移此后可以進行回遷。
try {
continueAbility();
} catch (IllegalStateException e) {
// Maybe another continuation in progress.
...
}
以 Page 從設備 A 遷移到設備B為例,詳細的流程如下:
1.設備 A 上的 Page 請求遷移。
2.系統回調設備 A 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實例的 IAbilityContinuation.onStartContinuation() 方法,以確認當前是否可以立即遷移。
3.如果可以立即遷移,則系統回調設備 A 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實例的 IAbilityContinuation.onSaveData() 方法,以便保存遷移后恢復狀態必須的數據。
4.如果保存數據成功,則系統在設備 B 上啟動同一個 Page ,并恢復 AbilitySlice 棧,然后回調 IAbilityContinuation.onRestoreData() 方法,傳遞此前保存的數據;此后設備 B 上此 Page 從 onStart() 開始其生命周期回調。
6.系統回調設備 A 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實例的 IAbilityContinuation.onCompleteContinuation() 方法,通知數據恢復成功與否。
請求回遷
使用 continueAbilityReversibly() 請求遷移并完成后,源側設備上已遷移的 Page 可以發起回遷,以便使用戶活動重新回到此設備。
try {
reverseContinueAbility();
} catch (IllegalStateException e) {
// Maybe another continuation in progress.
...
}
以Page從設備A遷移到設備B后并請求回遷為例,詳細的流程如下:
1.設備 A 上的 Page 請求回遷。
2.系統回調設備 B 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實例的 IAbilityContinuation.onStartContinuation() 方法,以確認當前是否可以立即遷移。
3.如果可以立即遷移,則系統回調設備 B 上 Page 及其 AbilitySlice 棧中所有 AbilitySlice 實例的 IAbilityContinuation.onSaveData() 方法,以便保存回遷后恢復狀態必須的數據。
4.如果保存數據成功,則系統在設備 A 上 Page 恢復 AbilitySlice 棧,然后回調 IAbilityContinuation.onRestoreData() 方法,傳遞此前保存的數據。
5.如果數據恢復成功,則系統終止設備 B 上 Page 的生命周期。
-
鴻蒙
+關注
關注
59文章
2543瀏覽量
43840 -
HarmonyOS
+關注
關注
80文章
2085瀏覽量
32351
發布評論請先 登錄
AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT
鴻蒙OS適用的全場景到底什么意思?
鴻蒙os系統是什么意思 鴻蒙os系統有什么作用
通過HarmonyOS分布式能力實現任務的跨設備遷移設計資料分享
HarmonyOS應用開發-DiseributedVideoCodelab跨設備視頻遷移
華為鴻蒙OS正式發布 它的安全性能如何
華為鴻蒙OS又有嚇人的設計 蘋果的Carplay在鴻蒙OS面前真的自嘆不如
鴻蒙OS 分布式任務調度
鴻蒙OS和開源鴻蒙什么關系?

評論