




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第10章分布式任務調度引言本章學習目標了解HarmonyOS分布式任務調度的概念熟練使用HarmonyOS實現分布式任務調度過程2第10章分布式任務調度10.1分布式任務調度概述10.2分布式任務調度能力簡介10.3分布式任務調度實現原理310.4實現分布式任務調度10.5案例:分布式任務調度FA10.1分布式任務調度概述4分布式任務調度的核心價值有三個,分別是“超級虛擬終端”的能力互助、跨設備軟件訪問的系統服務、全場景下的任務調度。O1O2O3“超級虛擬終端”的能力互助在HarmonyOS中,分布式任務調度平臺是支持“超級虛擬終端”的關鍵技術和能力,提供針對多設備場景下的統一的組件管理能力。分布式任務調度平臺助力“超級虛擬終端”實現軟件和硬件兩方面的能力的互助??缭O備軟件訪問的系統服務為了降低開發(fā)者開發(fā)跨設備應用的難度,分布式任務調度平臺提供了跨設備軟件訪問的系統服務。借助分布式任務調度平臺,開發(fā)者在調用跨設備的服務時,實際上跟調用本地服務基本上沒有差別。全場景下的任務調度分布式任務調度無論是在HarmonyOS的富設備上,還是在HarmonyOS的輕設備上,都是支持的。除此之外,通過HarmonyOS分布式中間件還能夠支持其他OS的任務調度。第10章分布式任務調度10.1分布式任務調度概述10.2分布式任務調度能力簡介10.3分布式任務調度實現原理510.4實現分布式任務調度10.5案例:分布式任務調度FA10.2分布式任務調度能力簡介6分布式任務調度平臺在HarmonyOS底層實現Ability跨設備的組件管理、控制和訪問。截至目前,分布式任務調度平臺已經開放的功能包括:全局查詢:支持查詢在相同組網下到底有哪些設備,這些設備是在線的還是離線的,等等。啟動和關閉:向開發(fā)者提供管理遠程Ability的能力,即支持啟動Page模板的Ability,以及啟動、關閉Service和Data模板的Ability。連接和斷開連接:向開發(fā)者提供跨設備控制服務(Service和Data模板的Abiy)的能力,開發(fā)者可以通過與遠程服務連接及斷開連接實現獲取或注銷跨設備管理服務的對象,達到和本地一致的服務調度。遷移能力:向開發(fā)者提供跨設備業(yè)務的無縫遷移能力,開發(fā)者可以通過調用Page模板Ability的遷移接口將本地業(yè)務無縫遷移到指定設備中,打通設備間的壁壘。輕量通信:可以通過遠程對象的方式來實現設備之間的輕量通信。10.2分布式任務調度能力簡介7下面分別介紹HarmonyOS分布式任務調度平臺提供的四種功能:全局查詢全局查詢可以分為兩個維度:針對設備的查詢以及針對Ability的查詢。啟動和關閉跟PC不同,移動終端的一個短板在于其硬件資源和電池存在一定瓶頸,這決定了在為移動終端設計Ability時,這些Ability需要按需啟動或者關閉。分布式任務調度平臺提供了管理遠程Ability的能力,即支持啟動Page模板的Ability,以及啟動、關閉Service和Data模板的Ability。連接和斷開連接在連接到遠程設備之后,就可以對設備進行一些列的操作了。操作完成之后,也可以斷開連接。輕量通信輕量通信本質是指從RPC(RemoteProcedureCall,遠程過程調用)或者以消息的方式實現設備之間的通信。這使得設備在調用其他方法時跟調用本地方法類似。第10章分布式任務調度10.1分布式任務調度概述10.2分布式任務調度能力簡介10.3分布式任務調度實現原理810.4實現分布式任務調度10.5案例:分布式任務調度FA10.3分布式任務調度實現原理9分布式任務調度實現原理最為核心的問題是設備之間的通信問題。PRC主要涉及三方面,即接口定義、序列化和反序列化。要實現PRC,必須要實現Iremotebroker接口。同時,需要在本地及對端分別實現對外接口一致的代理。HarmonyOS設備之間的通信無論是調用本地設備還是遠程設備的Ability,HarmonyOS都是通過Remoteobject來實現的。當初次調用遠程設備時,會先通過分布式調度平臺獲取到遠程設備的一個句柄。在后續(xù)的通信過程中本地設備就可以不必再依賴分布式調度平臺而直接通過句柄去跟遠程設備進行通信,從而提升通信效率。HarmonyOS設備與其他OS設備之間的通信與HarmonyOS設備之間的通信不同,HarmonyOS設備與其他OS設備之間無法直接通過句柄去調用,因此分布式調度平臺充當了HarmonyOS設備與其他OS設備之間的代理。所有的通信必須經過分布式調度平臺,分布式調度平臺會做調用過程中的序列化和反序列化。因此,從通信效率而言HarmonyOS設備與其他OS設備之間的通信效率肯定要低于HarmonyOS設備之間的通信。第10章分布式任務調度10.1分布式任務調度概述10.2分布式任務調度能力簡介10.3分布式任務調度實現原理1010.4實現分布式任務調度10.5案例:分布式任務調度FA10.4.1
如何實現分布式任務調度11要實現分布式任務調度,開發(fā)者需要在應用中做如下操作:在Intent中設置支持分布式的標記(例如Intent.FLAG_ABILITYSLICE_MULTI_DEVICE表示該應用支持分布式調度),否則將無法獲得分布式能力。在config.json中的reqPermissions字段中添加多設備協同訪問的權限申請:"name":"ohos.permission.DISTRIBUTED_DATASYNC"。PA的調用支持連接及斷開連接、啟動及關閉這4類行為,在進行調度時:必須在Intent中指定PA對應的BundleName和AbilityName。FA的調用支持啟動和遷移行為,在進行調度時:當啟動FA時,需要開發(fā)者在Intent中指定遠端設備的DeviceId、BundleName和AbilityName。FA的遷移實現相同BundleName和AbilityName的FA跨設備遷移時,需要指定遷移設備的DeviceId。10.4.2分布式任務調度支持的場景12根據Ability模板及意圖的不同,分布式任務調度向開發(fā)者提供了6種能力:啟動遠程FA(PageAbility)、啟動遠程PA(ServiceAbility、DataAbility)、關閉遠程PA、連接遠程PA、斷開連接遠程PA和FA跨設備遷移。下面以設備A(本地設備)和設備B(遠端設備)為例進行場景介紹:設備A啟動設備B的FA:在設備A上通過本地應用提供的啟動按鈕啟動設備B上對應的FA。例如,設備A控制設備B打開相冊,只需開發(fā)者在啟動FA時指定打開相冊的意圖即可。設備A啟動設備B的PA:在設備A上通過本地應用提供的啟動按鈕啟動設備B上指定的PA。例如,開發(fā)者在啟動遠程服務時通過意圖指定音樂播放服務,即可實現設備A啟動設備B音樂播放的能力。設備A關閉設備B的PA:在設備A上通過本地應用提供的關閉按鈕關閉設備B上指定的PA。類似啟動的過程,開發(fā)者在關閉遠程服務時通過意圖指定音樂播放服務,即可實現關閉設備B上該服務的能力。設備A連接設備B的PA:在設備A上通過本地應用提供的連接按鈕連接設備B上指定的PA。連接后,通過其他功能相關按鈕實現控制對端PA的能力。通過連接關系,開發(fā)者可以實現跨設備的同步服務調度,實現如大型計算任務互助等價值場景。設備A與設備B的PA斷開連接:在設備A上通過本地應用提供的斷開連接的按鈕將之前已連接的PA斷開連接。設備A的FA遷移至設備B:設備A上通過本地應用提供的遷移按鈕將設備A的業(yè)務無縫遷移到設備B中。通過業(yè)務遷移能力打通設備A和設備B間的壁壘,實現如文檔跨設備編輯、視頻從客廳到房間跨設備接續(xù)播放等場景。第10章分布式任務調度10.1分布式任務調度概述10.2分布式任務調度能力簡介10.3分布式任務調度實現原理1310.4實現分布式任務調度10.5案例:分布式任務調度FA10.5案例:分布式任務調度FA14創(chuàng)建一個名為DistributedTaskSchedulingFA的應用來演示分布式任務調度FA實現的過程。應用頁面中需要添加下面這些組件:文本輸入組件:用于獲取文本內容。打開遠端頁面按鈕組件:用于啟動遠端設備指定的FA。遷移按鈕組件:用于將本地設備的Ability遷移至遠端設備?;剡w按鈕組件:用于將遠端設備的Ability遷移至本地設備。修改ability_main.xml文件,其內容如下:<?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案例:分布式任務調度FA15<Textohos:height="match_content"ohos:width="match_content"ohos:background_element="$graphic:background_ability_main"ohos:layout_alignment="horizontal_center"ohos:text="分布式任務調度案例"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案例:分布式任務調度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案例:分布式任務調度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案例:分布式任務調度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文件,其內容如下:10.5案例:分布式任務調度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" }]進行分布式任務調度需要分布式數據同步權限,在config.json文件中需要請求,其內容如下:上述代碼中,各個權限含義如下:ohos.permission.GET_BUNDLE_INFO:允許非系統應用程序查詢其他應用程序的信息。ohos.permission.DISTRIBUTED_DATASYNC:允許應用程序與另一個設備交換用戶數據ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:獲取其他設備信息。ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:獲取其他設備狀態(tài)。10.5案例:分布式任務調度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){//應用未被授予權限
if(canRequestPermission("ohos.permission.DISTRIBUTED_DATASYNC")){//是否可以申請彈框授權(首次申請或者用戶未選擇禁止且不再提示)requestPermissionsFromUser(newString[]{"ohos.permission.DISTRIBUTED_DATASYNC"},MY_PERMISSIONS_DISTRIBUTED_DATASYNC);}else{//顯示應用需要權限的理由,提示用戶進入設置授權
}}else{//權限已被授予
}}修改MainAbility,內容如下:10.5案例:分布式任務調度FA21@OverridepublicvoidonRequestPermissionsFromUserResult(intrequestCode,String[]permissions,int[]grantResults){switch(requestCode){caseMY_PERMISSIONS_DISTRIBUTED_DATASYNC:{//匹配requestPermissions的requestCodeif(grantResults.length>0&&grantResults[0]==IBundleManager.PERMISSION_GRANTED){//權限被授予
//注意:因時間差導致接口權限檢查時有無權限
//所以對那些因無權限而拋異常的接口進行異常捕獲處理
}else{//權限被拒絕
}return;}}}10.5案例:分布式任務調度FA22@OverridepublicbooleanonStartContinuation(){returntrue;}@OverridepublicbooleanonSaveData(IntentParamsintentParams){returntrue;}@OverridepublicbooleanonRestoreData(IntentParamsintentParams){returntrue;}@OverridepublicvoidonCompleteContinuation(inti){}10.5案例:分布式任務調度FA23publicclassMainAbilitySliceextendsAbilitySliceimplementsIAbilityContinuation{//文本輸入框
privateTextFieldTextField_Input;//需要恢復的數據
StringReply;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//找到組件
TextField_Input=findComponentById(ResourceTable.Id_TextField_Input);//將恢復的數據顯示在頁面上
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添加單擊事件,打開目標設備的目標PageBtn_Open.setClickedListener(component->{//獲取在線設備列表
List<DeviceInfo>deviceInfoList=修改MainAbilitySlice,其內容如下:10.5案例:分布式任務調度FA24DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);//如果設備列表為空,則返回
if(deviceInfoList.isEmpty()){return;}//獲取設備Id,這里是另一臺設備
StringdeviceId=deviceInfoList.get(0).getDeviceId();//創(chuàng)建Intent對象
Intentintent1=newIntent();//創(chuàng)建Operation對象
Operationoperation=newIntent.OperationBuilder()//設置目標設備
.withDeviceId(deviceId)//設置目標包名
.withBundleName(getBundleName())//設置目標Page名
.withAbilityName(MainAbility.class.getName())//設置分布式能力標簽
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE).build();intent1.setOperation(operation);//啟動目標AbilitystartAbility(intent1);});10.5案例:分布式任務調度FA25 //給Btn_Move添加單擊事件,請求遷移
Btn_Move.setClickedListener(component->{//獲取在線設備列表
List<DeviceInfo>deviceInfoList=DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);//如果設備列表為空,則返回
if(deviceInfoList.isEmpty()){return;}//獲取設備Id,這里是另一臺設備
StringdeviceId=deviceInfoList.get(0).getDeviceId();//只請求遷移
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時勞工合同范本
- 與企業(yè)有關合同范本文檔
- 書籍委托銷售合同范本
- 2024年溫州市自來水有限公司招聘考試真題
- 2024年天津市中西醫(yī)結合醫(yī)院(天津市南開醫(yī)院)招聘考試真題
- 加油站公司合同范本
- 2024年廈門市集美區(qū)杏東中學教師招聘考試真題
- 2024年溫州文成農商銀行招聘筆試真題
- 鳳崗酒店蔬菜配送合同范本
- 2024年六安霍邱聯合村鎮(zhèn)銀行招聘考試真題
- 私立醫(yī)療機構2025年運營策略與計劃
- 2024年南京機電職業(yè)技術學院單招職業(yè)技能測試題庫標準卷
- 事業(yè)單位考試職業(yè)能力傾向測驗(綜合管理類A類)試題與參考答案(2024年)
- 《血管活性藥物靜脈輸注護理》團體標準解讀
- 小紅書食用農產品承諾書示例
- GB/T 15934-2024電器附件電線組件和互連電線組件
- 【課件】化學與人體健康課件-九年級化學人教版(2024)下冊
- 安全現狀評價報告三篇
- 2024年版的企業(yè)績效評價標準
- (正式版)CB∕T 4557-2024 船舶行業(yè)企業(yè)勞動防護用品配備要求
- MR850濕化器使用說明
評論
0/150
提交評論