本文是對(duì)分布式任務(wù)調(diào)度的一個(gè)技術(shù)教程,以一個(gè)簡單的案例來講解。
正文部分分為兩個(gè)部分:
第一部分是對(duì)分布式任務(wù)調(diào)度的簡單概述
第二部分是分布式任務(wù)調(diào)度的一個(gè)簡單案例(跨設(shè)備 FA 的拉起)
分布式任務(wù)調(diào)度的簡單概述
Ability 可以分為 FA(Feature Ability)和 PA(Particle Ability)兩種類型。
①FA 支持 Page Ability
Page 模板:FA 唯一支持的模板,用于提供與用戶交互的能力。一個(gè) Page 實(shí)例可以包含一組相關(guān)頁面,每個(gè)頁面用一個(gè) AbilitySlice 實(shí)例表示。
②PA 支持 Service Ability 和 Data Ability
Service 模板:用于提供后臺(tái)運(yùn)行任務(wù)的能力。Data 模板:用于對(duì)外部提供統(tǒng)一的數(shù)據(jù)訪問抽象。
根據(jù) Ability 模板及意圖的不同,分布式任務(wù)調(diào)度向開發(fā)者提供以下六種能力:
啟動(dòng)遠(yuǎn)程 FA
啟動(dòng)遠(yuǎn)程 PA
關(guān)閉遠(yuǎn)程 PA
連接遠(yuǎn)程 PA
斷開連接遠(yuǎn)程 PA
FA 跨設(shè)備遷移
“跨設(shè)備FA的拉起”的教程
①創(chuàng)建項(xiàng)目
DevEco Studio 下載安裝成功后,打開 DevEco Studio,點(diǎn)擊左上角的 File,點(diǎn)擊 New,再選擇 New Project。
選擇 Empty Ability(Java),然后點(diǎn)擊 Next,給項(xiàng)目命名 distribute_FA,選擇設(shè)備類型 Phone,最后點(diǎn)擊 Finish。
②申請(qǐng)權(quán)限
在 entry>src>main>config.json 文件中最下方"launchType": "standard"后面的中括號(hào)后且在上方的"module"的花括號(hào)內(nèi)添加以下代碼添加所需要的分布式權(quán)限:
"reqPermissions":[ { "name":"ohos.permission.DISTRIBUTED_DATASYNC" }, { "name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO" } ]
第一個(gè)權(quán)限是允許不同設(shè)備間的數(shù)據(jù)交換(敏感權(quán)限)。第二個(gè)權(quán)限是允許獲取分布式組網(wǎng)內(nèi)的設(shè)備列表和設(shè)備信息(非敏感權(quán)限)。應(yīng)用在使用對(duì)應(yīng)服務(wù)的能力或數(shù)據(jù)時(shí),需要申請(qǐng)對(duì)應(yīng)權(quán)限。
已在 config.json 文件中聲明的非敏感權(quán)限,會(huì)在應(yīng)用安裝時(shí)自動(dòng)授予,該類權(quán)限的授權(quán)方式為系統(tǒng)授權(quán)(system_grant)。
敏感權(quán)限需要應(yīng)用動(dòng)態(tài)申請(qǐng),通過運(yùn)行時(shí)發(fā)送彈窗的方式請(qǐng)求用戶授權(quán),該類權(quán)限的授權(quán)方式為用戶授權(quán)(user_grant)。
在 entry>src>main>Java>MainAbility 文件里添加敏感權(quán)限(非敏感權(quán)限在該文件里可加可不加),在 onStart 函數(shù)里添加以下代碼:
requestPermissionsFromUser(newString[]{"ohos.permission.DISTRIBUTED_DATASYNC"},0);
如果添加的權(quán)限比較多可以像這樣新建一個(gè)字符串?dāng)?shù)組,后面的 0 是請(qǐng)求碼(requestCode),是用來標(biāo)識(shí)請(qǐng)求的來源(這個(gè)值任自己設(shè)定)。
③界面布局
在 entry>src>main>resources>base>layout>ability_main.xml 文件里添加一個(gè)按鈕組件,加入唯一標(biāo)識(shí)符 id 并配置好其他相應(yīng)的屬性,代碼如下:
為了方便+好看,我把上方文本組件的 id 跟 text 改了一下:
ohos:id="$+id:text" ohos:text="分布式任務(wù)調(diào)度"
④設(shè)置點(diǎn)擊事件
在 entry>src>main>Java>slice>MainAbilitySlice 文件里的 onStart 下方定義一個(gè)函數(shù)來設(shè)置按鈕的點(diǎn)擊事件:
獲取分布式組網(wǎng)內(nèi)的設(shè)備列表和設(shè)備信息(其中 FLAG_GET_ONLINE_DEVICE 是獲取在線設(shè)備,可以根據(jù)需要選擇離線 OFFLINE 或者全部設(shè)備 ALL)。
get(0) 是指列表 devicelist 第一個(gè)元素。
operation 是用來封裝與 intent 相關(guān)的參數(shù)和操作,這里涉及的是 AbilityName、BundleName、DevicedId、Flags。
privatevoidrun_start(){ Buttonstart=(Button)findComponentById(ResourceTable.Id_start); start.setClickedListener(newComponent.ClickedListener(){ @Override publicvoidonClick(Componentcomponent){ List
輸入時(shí)注意以下幾個(gè)點(diǎn),不要選錯(cuò)了;如果有標(biāo)紅,移到上面看看是不是引入包加錯(cuò)了:
在 onStart 里調(diào)用上面的點(diǎn)擊函數(shù) run_start(),別忘了要定義變量 deviceId:
通過上述步驟,你就能實(shí)現(xiàn)跨設(shè)備拉起它的主頁面啦!如果想要拉起其他頁面,可以對(duì)以下地方進(jìn)行相應(yīng)更改。
例如新建一個(gè) Ability 文件和一個(gè) Slilce 文件,然后在這個(gè)文件圖二的位置作相應(yīng)修改,然后修改圖一的位置為這個(gè)新建的 Ability。
以上就是我這次的小分享啦。
責(zé)任編輯:haq
-
華為
+關(guān)注
關(guān)注
215文章
34126瀏覽量
249444 -
鴻蒙系統(tǒng)
+關(guān)注
關(guān)注
183文章
2627瀏覽量
65782 -
HarmonyOS
+關(guān)注
關(guān)注
79文章
1946瀏覽量
29733
原文標(biāo)題:1個(gè)簡單案例講解:鴻蒙分布式任務(wù)調(diào)度
文章出處:【微信號(hào):Huawei_Kirin,微信公眾號(hào):華為麒麟】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論