W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵(lì)
跨設(shè)備遷移(下文簡稱“遷移”)支持將 Page 在同一用戶的不同設(shè)備間遷移,以便支持用戶無縫切換的訴求。以 Page 從設(shè)備 A 遷移到設(shè)備 B 為例,遷移動作主要步驟如下:
開發(fā)者可以參考以下詳細(xì)步驟開發(fā)具有遷移功能的 Page。
Page 請求遷移后,系統(tǒng)首先回調(diào)此方法,開發(fā)者可以在此回調(diào)中決策當(dāng)前是否可以執(zhí)行遷移,比如,彈框讓用戶確認(rèn)是否開始遷移。
如果 onStartContinuation() 返回 true ,則系統(tǒng)回調(diào)此方法,開發(fā)者在此回調(diào)中保存必須傳遞到另外設(shè)備上以便恢復(fù) Page 狀態(tài)的數(shù)據(jù)。
源側(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 會重新啟動其生命周期,無論其啟動模式如何配置。且系統(tǒng)回調(diào)此方法的時(shí)機(jī)在 onStart() 之前。
目標(biāo)側(cè)設(shè)備上恢復(fù)數(shù)據(jù)一旦完成,系統(tǒng)就會在源側(cè)設(shè)備上回調(diào) Page 的此方法,以便通知應(yīng)用遷移流程已結(jié)束。開發(fā)者可以在此檢查遷移結(jié)果是否成功,并在此處理遷移結(jié)束的動作,例如,應(yīng)用可以在遷移完成后終止自身生命周期。
如果開發(fā)者使用 continueAbilityReversibly() 而不是 continueAbility(),則此后可以在源側(cè)設(shè)備上使用 reverseContinueAbility() 進(jìn)行回遷。這種場景下,相當(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)此接口。
實(shí)現(xiàn) IAbilityContinuation 的 Page 可以在其生命周期內(nèi),調(diào)用 continueAbility() 或 continueAbilityReversibly() 請求遷移。兩者的區(qū)別是,通過后者發(fā)起的遷移此后可以進(jìn)行回遷。
try {
continueAbility();
} catch (IllegalStateException e) {
// Maybe another continuation in progress.
...
}
以 Page 從設(shè)備 A 遷移到設(shè)備B為例,詳細(xì)的流程如下:
使用 continueAbilityReversibly() 請求遷移并完成后,源側(cè)設(shè)備上已遷移的 Page 可以發(fā)起回遷,以便使用戶活動重新回到此設(shè)備。
try {
reverseContinueAbility();
} catch (IllegalStateException e) {
// Maybe another continuation in progress.
...
}
以Page從設(shè)備A遷移到設(shè)備B后并請求回遷為例,詳細(xì)的流程如下:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: