自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于PA的跨設(shè)備遷移功能及PageAbility代碼示例工程完全解

開發(fā) 前端
跨設(shè)備遷移是基于分布式流轉(zhuǎn)操作的。是很有趣和很值得研究的功能,同Page,不同Page,不同設(shè)備。

[[416894]]

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

一、跨設(shè)備遷移

是什么:是一種基于Ability框架下的Page Ability的能力

遷移動(dòng)作主要步驟:

  • 源側(cè)設(shè)備上的Page請求遷移
  • 源側(cè)設(shè)備回調(diào)保存數(shù)據(jù)方法
  • 目標(biāo)側(cè)設(shè)備啟動(dòng)Page,回調(diào)恢復(fù)數(shù)據(jù)方法

請求遷移的兩種方法

  • continue Ability()
  • continueAbilityReversibly()

區(qū)別在于:continueAbility()不能進(jìn)行回遷,continueAbilityReversibly()可以進(jìn)行回遷

實(shí)現(xiàn)IAbilityContinuation接口

  • onStartContinuation()
  • onSaveData()
  • onRestoreData()
  • onCompleteContinuation()
  • onFailedContinuation()
  • onRemoteTerminated()

文字描述不夠清晰和直接,故用表的形式進(jìn)行輸出

A作為源側(cè)向目標(biāo)側(cè)B進(jìn)行遷移其回調(diào)方法的順序是:

二、PageAbility代碼示例工程

本示例演示了同一Page Ability內(nèi)和不同Page間的AbilitySlice導(dǎo)航,以及Page Ability的跨端遷移。

(一)項(xiàng)目演示

因?yàn)槭纠a的字真的小得讓人眼瞎,所以就調(diào)大了一點(diǎn)

跨設(shè)備遷移

同PA不同Page間的導(dǎo)航

(二)工程目錄及其Slice直接的關(guān)系

(三)同一PA導(dǎo)航與不同Page

同Page

Page內(nèi)的AbilitySlice實(shí)例是以堆棧存放的,其頁內(nèi)導(dǎo)航的數(shù)據(jù)傳遞是通過intent傳遞的,源頁面調(diào)用方法setParam(),其值是鍵值對。在跳轉(zhuǎn)頁面通過getParam進(jìn)行接收(intent.getParam(key:“XX”))

目標(biāo)頁面向源頁面?zhèn)鬟f數(shù)據(jù),構(gòu)建intent實(shí)例(返回?cái)?shù)據(jù)的載體)-賦值給intent類型的resultIntent變量-調(diào)用方法setParam()(鍵值對的形式)-調(diào)用方法setResult()指定實(shí)例作為參數(shù)-在原頁面調(diào)用PresentForResult()(請求碼非負(fù)整數(shù)作為第三個(gè)參數(shù)用于標(biāo)識某一次頁面導(dǎo)航)-重寫方法onResult(處理返回?cái)?shù)據(jù))-

不同Page

  • 顯式:在觸發(fā)事件中構(gòu)造Intent.OperationBuilder的實(shí)例-分別鏈?zhǔn)秸{(diào)用
  1. Operation operation=new Intent.OperationBuilder() 
  2. withBundleName(getBundleName()) 
  3.       .getAbilityName(目標(biāo)Ability.class.getName()) 
  4.       .build(); 

為了把目標(biāo)Page的包名和類名都封裝在需要傳遞的Intent類型的實(shí)例navigation中,需要調(diào)用navigation的方法setOperation并指定才創(chuàng)建的Intent類型的實(shí)例operation為其參數(shù)。最后用startAbility且把navigation作為參數(shù)。

從目標(biāo)頁面跳轉(zhuǎn)到源頁面且處理數(shù)據(jù),需要在目標(biāo)調(diào)用getAbility.setParam并設(shè)置響應(yīng)碼(是用來標(biāo)識一次響應(yīng))。之后在原頁面把startAbility變更為startAbilityForResult(響應(yīng)碼)-把回調(diào)方法onResult替換為onAbilityResult(響應(yīng)碼),

(四)跨設(shè)備遷移

  1. 設(shè)備A上的Page請求遷移。
  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)。
  5. 系統(tǒng)回調(diào)設(shè)備A上Page及其AbilitySlice棧中所有AbilitySlice實(shí)例的IAbilityContinuation.onCompleteContinuation()方法,通知數(shù)據(jù)恢復(fù)成功與否。
  6. 遷移過程中發(fā)生異常,系統(tǒng)回調(diào)設(shè)備A上Page及其AbilitySlice棧中所有AbilitySlice實(shí)例的IAbilityContinuation.onFailedContinuation()方法,通知遷移過程中發(fā)生異常,并不是所有異常都會(huì)回調(diào)FA此方法,僅局限于該接口枚舉的異常。

總結(jié)

跨設(shè)備遷移是基于分布式流轉(zhuǎn)操作的。是很有趣和很值得研究的功能

同Page,不同Page,不同設(shè)備。三種情況下Page生命周期需要搞懂,需要分清楚Page生命周期回調(diào)方法,與跨設(shè)備遷移中實(shí)現(xiàn)IAbilityContinuation接口的回調(diào)方法。一定注意源側(cè)與目標(biāo)側(cè)的方法調(diào)用的順序。

對于基礎(chǔ)的Ability與Slice的關(guān)系、Slice與Layout(xml)的關(guān)系、Intent的理解得到了提升。

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-12-21 09:56:47

鴻蒙HarmonyOS應(yīng)用

2021-08-04 14:32:16

鴻蒙HarmonyOS應(yīng)用

2021-08-13 13:53:23

鴻蒙HarmonyOS應(yīng)用

2021-06-16 15:18:03

鴻蒙HarmonyOS應(yīng)用

2021-08-16 14:42:28

鴻蒙HarmonyOS應(yīng)用

2010-06-30 12:40:47

Linux SNMP

2010-07-05 11:32:54

HART協(xié)議

2021-01-06 11:21:56

鴻蒙HarmonyOS應(yīng)用開發(fā)

2009-09-04 15:50:55

RadioButton

2011-11-24 11:24:45

iCloud云計(jì)算蘋果

2013-05-29 09:29:07

OSI傳輸層TCP協(xié)議

2017-10-11 14:45:58

Linuxinotify功能實(shí)現(xiàn)原理

2022-09-08 15:18:51

Ability鴻蒙

2010-03-18 17:24:31

無線ZigBee網(wǎng)絡(luò)

2010-07-09 11:37:29

動(dòng)態(tài)路由選擇協(xié)議

2010-06-30 11:17:53

SNMP監(jiān)測交換機(jī)

2010-06-24 16:47:45

Linux Chgrp

2021-10-28 14:48:46

鴻蒙HarmonyOS應(yīng)用

2024-09-26 10:41:31

2011-09-14 09:56:48

HTML 5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號