




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第10章分布式任務(wù)調(diào)度引言本章學習目標了解HarmonyOS分布式任務(wù)調(diào)度的概念熟練使用HarmonyOS實現(xiàn)分布式任務(wù)調(diào)度過程2第10章分布式任務(wù)調(diào)度10.1分布式任務(wù)調(diào)度概述10.2分布式任務(wù)調(diào)度能力簡介10.3分布式任務(wù)調(diào)度實現(xiàn)原理310.4實現(xiàn)分布式任務(wù)調(diào)度10.5案例:分布式任務(wù)調(diào)度FA10.1分布式任務(wù)調(diào)度概述4分布式任務(wù)調(diào)度的核心價值有三個,分別是“超級虛擬終端”的能力互助、跨設(shè)備軟件訪問的系統(tǒng)服務(wù)、全場景下的任務(wù)調(diào)度。O1O2O3“超級虛擬終端”的能力互助在HarmonyOS中,分布式任務(wù)調(diào)度平臺是支持“超級虛擬終端”的關(guān)鍵技術(shù)和能力,提供針對多設(shè)備場景下的統(tǒng)一的組件管理能力。分布式任務(wù)調(diào)度平臺助力“超級虛擬終端”實現(xiàn)軟件和硬件兩方面的能力的互助??缭O(shè)備軟件訪問的系統(tǒng)服務(wù)為了降低開發(fā)者開發(fā)跨設(shè)備應(yīng)用的難度,分布式任務(wù)調(diào)度平臺提供了跨設(shè)備軟件訪問的系統(tǒng)服務(wù)。借助分布式任務(wù)調(diào)度平臺,開發(fā)者在調(diào)用跨設(shè)備的服務(wù)時,實際上跟調(diào)用本地服務(wù)基本上沒有差別。全場景下的任務(wù)調(diào)度分布式任務(wù)調(diào)度無論是在HarmonyOS的富設(shè)備上,還是在HarmonyOS的輕設(shè)備上,都是支持的。除此之外,通過HarmonyOS分布式中間件還能夠支持其他OS的任務(wù)調(diào)度。第10章分布式任務(wù)調(diào)度10.1分布式任務(wù)調(diào)度概述10.2分布式任務(wù)調(diào)度能力簡介10.3分布式任務(wù)調(diào)度實現(xiàn)原理510.4實現(xiàn)分布式任務(wù)調(diào)度10.5案例:分布式任務(wù)調(diào)度FA10.2分布式任務(wù)調(diào)度能力簡介6分布式任務(wù)調(diào)度平臺在HarmonyOS底層實現(xiàn)Ability跨設(shè)備的組件管理、控制和訪問。截至目前,分布式任務(wù)調(diào)度平臺已經(jīng)開放的功能包括:全局查詢:支持查詢在相同組網(wǎng)下到底有哪些設(shè)備,這些設(shè)備是在線的還是離線的,等等。啟動和關(guān)閉:向開發(fā)者提供管理遠程Ability的能力,即支持啟動Page模板的Ability,以及啟動、關(guān)閉Service和Data模板的Ability。連接和斷開連接:向開發(fā)者提供跨設(shè)備控制服務(wù)(Service和Data模板的Abiy)的能力,開發(fā)者可以通過與遠程服務(wù)連接及斷開連接實現(xiàn)獲取或注銷跨設(shè)備管理服務(wù)的對象,達到和本地一致的服務(wù)調(diào)度。遷移能力:向開發(fā)者提供跨設(shè)備業(yè)務(wù)的無縫遷移能力,開發(fā)者可以通過調(diào)用Page模板Ability的遷移接口將本地業(yè)務(wù)無縫遷移到指定設(shè)備中,打通設(shè)備間的壁壘。輕量通信:可以通過遠程對象的方式來實現(xiàn)設(shè)備之間的輕量通信。10.2分布式任務(wù)調(diào)度能力簡介7下面分別介紹HarmonyOS分布式任務(wù)調(diào)度平臺提供的四種功能:全局查詢?nèi)植樵兛梢苑譃閮蓚€維度:針對設(shè)備的查詢以及針對Ability的查詢。啟動和關(guān)閉跟PC不同,移動終端的一個短板在于其硬件資源和電池存在一定瓶頸,這決定了在為移動終端設(shè)計Ability時,這些Ability需要按需啟動或者關(guān)閉。分布式任務(wù)調(diào)度平臺提供了管理遠程Ability的能力,即支持啟動Page模板的Ability,以及啟動、關(guān)閉Service和Data模板的Ability。連接和斷開連接在連接到遠程設(shè)備之后,就可以對設(shè)備進行一些列的操作了。操作完成之后,也可以斷開連接。輕量通信輕量通信本質(zhì)是指從RPC(RemoteProcedureCall,遠程過程調(diào)用)或者以消息的方式實現(xiàn)設(shè)備之間的通信。這使得設(shè)備在調(diào)用其他方法時跟調(diào)用本地方法類似。第10章分布式任務(wù)調(diào)度10.1分布式任務(wù)調(diào)度概述10.2分布式任務(wù)調(diào)度能力簡介10.3分布式任務(wù)調(diào)度實現(xiàn)原理810.4實現(xiàn)分布式任務(wù)調(diào)度10.5案例:分布式任務(wù)調(diào)度FA10.3分布式任務(wù)調(diào)度實現(xiàn)原理9分布式任務(wù)調(diào)度實現(xiàn)原理最為核心的問題是設(shè)備之間的通信問題。PRC主要涉及三方面,即接口定義、序列化和反序列化。要實現(xiàn)PRC,必須要實現(xiàn)Iremotebroker接口。同時,需要在本地及對端分別實現(xiàn)對外接口一致的代理。HarmonyOS設(shè)備之間的通信無論是調(diào)用本地設(shè)備還是遠程設(shè)備的Ability,HarmonyOS都是通過Remoteobject來實現(xiàn)的。當初次調(diào)用遠程設(shè)備時,會先通過分布式調(diào)度平臺獲取到遠程設(shè)備的一個句柄。在后續(xù)的通信過程中本地設(shè)備就可以不必再依賴分布式調(diào)度平臺而直接通過句柄去跟遠程設(shè)備進行通信,從而提升通信效率。HarmonyOS設(shè)備與其他OS設(shè)備之間的通信與HarmonyOS設(shè)備之間的通信不同,HarmonyOS設(shè)備與其他OS設(shè)備之間無法直接通過句柄去調(diào)用,因此分布式調(diào)度平臺充當了HarmonyOS設(shè)備與其他OS設(shè)備之間的代理。所有的通信必須經(jīng)過分布式調(diào)度平臺,分布式調(diào)度平臺會做調(diào)用過程中的序列化和反序列化。因此,從通信效率而言HarmonyOS設(shè)備與其他OS設(shè)備之間的通信效率肯定要低于HarmonyOS設(shè)備之間的通信。第10章分布式任務(wù)調(diào)度10.1分布式任務(wù)調(diào)度概述10.2分布式任務(wù)調(diào)度能力簡介10.3分布式任務(wù)調(diào)度實現(xiàn)原理1010.4實現(xiàn)分布式任務(wù)調(diào)度10.5案例:分布式任務(wù)調(diào)度FA10.4.1
如何實現(xiàn)分布式任務(wù)調(diào)度11要實現(xiàn)分布式任務(wù)調(diào)度,開發(fā)者需要在應(yīng)用中做如下操作:在Intent中設(shè)置支持分布式的標記(例如Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示該應(yīng)用支持分布式調(diào)度),否則將無法獲得分布式能力。在config.json中的reqPermissions字段中添加多設(shè)備協(xié)同訪問的權(quán)限申請:"name":"ohos.permission.DISTRIBUTED_DATASYNC"。PA的調(diào)用支持連接及斷開連接、啟動及關(guān)閉這4類行為,在進行調(diào)度時:必須在Intent中指定PA對應(yīng)的BundleName和AbilityName。FA的調(diào)用支持啟動和遷移行為,在進行調(diào)度時:當啟動FA時,需要開發(fā)者在Intent中指定遠端設(shè)備的DeviceId、BundleName和AbilityName。FA的遷移實現(xiàn)相同BundleName和AbilityName的FA跨設(shè)備遷移時,需要指定遷移設(shè)備的DeviceId。10.4.2分布式任務(wù)調(diào)度支持的場景12根據(jù)Ability模板及意圖的不同,分布式任務(wù)調(diào)度向開發(fā)者提供了6種能力:啟動遠程FA(PageAbility)、啟動遠程PA(ServiceAbility、DataAbility)、關(guān)閉遠程PA、連接遠程PA、斷開連接遠程PA和FA跨設(shè)備遷移。下面以設(shè)備A(本地設(shè)備)和設(shè)備B(遠端設(shè)備)為例進行場景介紹:設(shè)備A啟動設(shè)備B的FA:在設(shè)備A上通過本地應(yīng)用提供的啟動按鈕啟動設(shè)備B上對應(yīng)的FA。例如,設(shè)備A控制設(shè)備B打開相冊,只需開發(fā)者在啟動FA時指定打開相冊的意圖即可。設(shè)備A啟動設(shè)備B的PA:在設(shè)備A上通過本地應(yīng)用提供的啟動按鈕啟動設(shè)備B上指定的PA。例如,開發(fā)者在啟動遠程服務(wù)時通過意圖指定音樂播放服務(wù),即可實現(xiàn)設(shè)備A啟動設(shè)備B音樂播放的能力。設(shè)備A關(guān)閉設(shè)備B的PA:在設(shè)備A上通過本地應(yīng)用提供的關(guān)閉按鈕關(guān)閉設(shè)備B上指定的PA。類似啟動的過程,開發(fā)者在關(guān)閉遠程服務(wù)時通過意圖指定音樂播放服務(wù),即可實現(xiàn)關(guān)閉設(shè)備B上該服務(wù)的能力。設(shè)備A連接設(shè)備B的PA:在設(shè)備A上通過本地應(yīng)用提供的連接按鈕連接設(shè)備B上指定的PA。連接后,通過其他功能相關(guān)按鈕實現(xiàn)控制對端PA的能力。通過連接關(guān)系,開發(fā)者可以實現(xiàn)跨設(shè)備的同步服務(wù)調(diào)度,實現(xiàn)如大型計算任務(wù)互助等價值場景。設(shè)備A與設(shè)備B的PA斷開連接:在設(shè)備A上通過本地應(yīng)用提供的斷開連接的按鈕將之前已連接的PA斷開連接。設(shè)備A的FA遷移至設(shè)備B:設(shè)備A上通過本地應(yīng)用提供的遷移按鈕將設(shè)備A的業(yè)務(wù)無縫遷移到設(shè)備B中。通過業(yè)務(wù)遷移能力打通設(shè)備A和設(shè)備B間的壁壘,實現(xiàn)如文檔跨設(shè)備編輯、視頻從客廳到房間跨設(shè)備接續(xù)播放等場景。第10章分布式任務(wù)調(diào)度10.1分布式任務(wù)調(diào)度概述10.2分布式任務(wù)調(diào)度能力簡介10.3分布式任務(wù)調(diào)度實現(xiàn)原理1310.4實現(xiàn)分布式任務(wù)調(diào)度10.5案例:分布式任務(wù)調(diào)度FA10.5案例:分布式任務(wù)調(diào)度FA14創(chuàng)建一個名為DistributedTaskSchedulingFA的應(yīng)用來演示分布式任務(wù)調(diào)度FA實現(xiàn)的過程。應(yīng)用頁面中需要添加下面這些組件:文本輸入組件:用于獲取文本內(nèi)容。打開遠端頁面按鈕組件:用于啟動遠端設(shè)備指定的FA。遷移按鈕組件:用于將本地設(shè)備的Ability遷移至遠端設(shè)備?;剡w按鈕組件:用于將遠端設(shè)備的Ability遷移至本地設(shè)備。修改ability_main.xml文件,其內(nèi)容如下:<?xmlversion="1.0"encoding="utf-8"?><DirectionalLayoutxmlns:ohos="/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:alignment="top"ohos:orientation="vertical">10.5案例:分布式任務(wù)調(diào)度FA15<Textohos:height="match_content"ohos:width="match_content"ohos:background_element="$graphic:background_ability_main"ohos:layout_alignment="horizontal_center"ohos:text="分布式任務(wù)調(diào)度案例"ohos:text_size="28fp"ohos:top_margin="10vp"/><TextFieldohos:id="$+id:TextField_Input"ohos:height="300vp"ohos:width="340vp"ohos:background_element="#DEDEDE"ohos:hint="請輸入:"ohos:layout_alignment="horizontal_center"ohos:margin="10vp"ohos:max_text_lines="5"ohos:multiple_lines="true"ohos:text_alignment="left"ohos:text_size="28fp"/>10.5案例:分布式任務(wù)調(diào)度FA16<Buttonohos:id="$+id:Btn_Open"ohos:height="match_content"ohos:width="match_parent"ohos:background_element="$graphic:background_ability_main_Button"ohos:layout_alignment="horizontal_center"ohos:margin="10vp"ohos:padding="5vp"ohos:text="打開遠端頁面"ohos:text_size="28fp"/><Buttonohos:id="$+id:Btn_Move"ohos:height="match_content"ohos:width="match_parent"ohos:background_element="$graphic:background_ability_main_Button"ohos:layout_alignment="horizontal_center"ohos:margin="10vp"ohos:padding="5vp"ohos:text="遷移"ohos:text_size="28fp"/>10.5案例:分布式任務(wù)調(diào)度FA17<Buttonohos:id="$+id:Btn_moveBack"ohos:height="match_content"ohos:width="match_parent"ohos:background_element="$graphic:background_ability_main_Button"ohos:layout_alignment="horizontal_center"ohos:margin="10vp"ohos:padding="5vp"ohos:text="回遷"ohos:text_size="28fp"/></DirectionalLayout>10.5案例:分布式任務(wù)調(diào)度FA18<?xmlversion="1.0"encoding="UTF-8"?><shapexmlns:ohos="/res/ohos"ohos:shape="rectangle"><solidohos:color="#0aabbc"/><cornersohos:radius="50vp"/></shape>Button組件引用了background_ability_main_Button文件,其內(nèi)容如下:10.5案例:分布式任務(wù)調(diào)度FA19"reqPermissions":[ { "name":"ohos.permission.GET_BUNDLE_INFO" }, { "name":"ohos.permission.DISTRIBUTED_DATASYNC" }, { "name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" }, { "name":"ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE" }]進行分布式任務(wù)調(diào)度需要分布式數(shù)據(jù)同步權(quán)限,在config.json文件中需要請求,其內(nèi)容如下:上述代碼中,各個權(quán)限含義如下:ohos.permission.GET_BUNDLE_INFO:允許非系統(tǒng)應(yīng)用程序查詢其他應(yīng)用程序的信息。ohos.permission.DISTRIBUTED_DATASYNC:允許應(yīng)用程序與另一個設(shè)備交換用戶數(shù)據(jù)ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:獲取其他設(shè)備信息。ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:獲取其他設(shè)備狀態(tài)。10.5案例:分布式任務(wù)調(diào)度FA20publicclassMainAbilityextendsAbilityimplementsIAbilityContinuation{privatestaticfinalintMY_PERMISSIONS_DISTRIBUTED_DATASYNC=1;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setMainRoute(MainAbilitySlice.class.getName());if(verifySelfPermission("ohos.permission.DISTRIBUTED_DATASYNC")!=IBundleManager.PERMISSION_GRANTED){//應(yīng)用未被授予權(quán)限
if(canRequestPermission("ohos.permission.DISTRIBUTED_DATASYNC")){//是否可以申請彈框授權(quán)(首次申請或者用戶未選擇禁止且不再提示)requestPermissionsFromUser(newString[]{"ohos.permission.DISTRIBUTED_DATASYNC"},MY_PERMISSIONS_DISTRIBUTED_DATASYNC);}else{//顯示應(yīng)用需要權(quán)限的理由,提示用戶進入設(shè)置授權(quán)
}}else{//權(quán)限已被授予
}}修改MainAbility,內(nèi)容如下:10.5案例:分布式任務(wù)調(diào)度FA21@OverridepublicvoidonRequestPermissionsFromUserResult(intrequestCode,String[]permissions,int[]grantResults){switch(requestCode){caseMY_PERMISSIONS_DISTRIBUTED_DATASYNC:{//匹配requestPermissions的requestCodeif(grantResults.length>0&&grantResults[0]==IBundleManager.PERMISSION_GRANTED){//權(quán)限被授予
//注意:因時間差導致接口權(quán)限檢查時有無權(quán)限
//所以對那些因無權(quán)限而拋異常的接口進行異常捕獲處理
}else{//權(quán)限被拒絕
}return;}}}10.5案例:分布式任務(wù)調(diào)度FA22@OverridepublicbooleanonStartContinuation(){returntrue;}@OverridepublicbooleanonSaveData(IntentParamsintentParams){returntrue;}@OverridepublicbooleanonRestoreData(IntentParamsintentParams){returntrue;}@OverridepublicvoidonCompleteContinuation(inti){}10.5案例:分布式任務(wù)調(diào)度FA23publicclassMainAbilitySliceextendsAbilitySliceimplementsIAbilityContinuation{//文本輸入框
privateTextFieldTextField_Input;//需要恢復的數(shù)據(jù)
StringReply;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//找到組件
TextField_Input=findComponentById(ResourceTable.Id_TextField_Input);//將恢復的數(shù)據(jù)顯示在頁面上
TextField_Input.setText(Reply);ButtonBtn_Open=findComponentById(ResourceTable.Id_Btn_Open);ButtonBtn_Move=findComponentById(ResourceTable.Id_Btn_Move);ButtonBtn_moveBack=findComponentById(ResourceTable.Id_Btn_moveBack);//給Btn_Open添加單擊事件,打開目標設(shè)備的目標PageBtn_Open.setClickedListener(component->{//獲取在線設(shè)備列表
List<DeviceInfo>deviceInfoList=修改MainAbilitySlice,其內(nèi)容如下:10.5案例:分布式任務(wù)調(diào)度FA24DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);//如果設(shè)備列表為空,則返回
if(deviceInfoList.isEmpty()){return;}//獲取設(shè)備Id,這里是另一臺設(shè)備
StringdeviceId=deviceInfoList.get(0).getDeviceId();//創(chuàng)建Intent對象
Intentintent1=newIntent();//創(chuàng)建Operation對象
Operationoperation=newIntent.OperationBuilder()//設(shè)置目標設(shè)備
.withDeviceId(deviceId)//設(shè)置目標包名
.withBundleName(getBundleName())//設(shè)置目標Page名
.withAbilityName(MainAbility.class.getName())//設(shè)置分布式能力標簽
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE).build();intent1.setOperation(operation);//啟動目標AbilitystartAbility(intent1);});10.5案例:分布式任務(wù)調(diào)度FA25 //給Btn_Move添加單擊事件,請求遷移
Btn_Move.setClickedListener(component->{//獲取在線設(shè)備列表
List<DeviceInfo>deviceInfoList=DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);//如果設(shè)備列表為空,則返回
if(deviceInfoList.isEmpty()){return;}//獲取設(shè)備Id,這里是另一臺設(shè)備
StringdeviceId=deviceInfoList.get(0).getDeviceId();//只請求遷移
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中職語文高教版 《永遇樂·京口北固亭懷古》教學設(shè)計
- 2025年海關(guān)招聘筆試題庫及答案
- 2025年北京英語三級試題及答案
- 2025年清華中學測試題及答案
- 2025年潛意識心結(jié)測試題及答案
- 2025年桌游設(shè)計測試題及答案
- 2025年食品物理試題及答案
- 2025年優(yōu)才書院面試題及答案
- 2025年索道維修面試題及答案
- 2025年海員培訓辦證考試題及答案
- 2025年蘇州工業(yè)園區(qū)職業(yè)技術(shù)學院單招職業(yè)適應(yīng)性測試題庫1套
- 中小學生預防校園欺凌主題班會課件
- 煙草專賣法知識考試題庫及答案
- 人工智能對輿情分析的影響
- 2025年北??叼B(yǎng)職業(yè)學院單招職業(yè)技能考試題庫參考答案
- 2025年宜春職業(yè)技術(shù)學院單招職業(yè)適應(yīng)性測試題庫新版
- 2025農(nóng)業(yè)部在京單位招聘應(yīng)屆高校畢業(yè)生等人員122人歷年高頻重點提升(共500題)附帶答案詳解
- 離職證明(標準模版)
- 2024年共青團入團積極分子考試題庫(附答案)
- GB 19644-2024食品安全國家標準乳粉和調(diào)制乳粉
- 道德與法治統(tǒng)編版六年級下冊全冊大單元任務(wù)群教學設(shè)計四個單元
評論
0/150
提交評論