今天我們來聊一下Service Ability,基于Service模板的Ability(以下簡稱“Service”)主要用于后臺運行任務(wù)(如執(zhí)行音樂播放、文件下載等),但不提供用戶交互界面。Service可由其他應(yīng)用或Ability啟動,即使用戶切換到其他應(yīng)用,Service仍將在后臺繼續(xù)運行。 這里就不得不提到另外一個知識點,線程。 其實目前我們前面提到的一些UI布局的繪制都是在主線程上進行的,又稱UI線程,默認情況下,所有的操作都是在主線程上執(zhí)行,這里如果我們系統(tǒng)通過ServiceAbility來完成后臺運行任務(wù),我們首先要初步了解一下asyncDispatch。 (1)初識TaskDispatcher的異步派發(fā)任務(wù)asyncDispatch; 那么TaskDispatcher又是什么呢?TaskDispatcher是一個任務(wù)分發(fā)器,它是Ability分發(fā)任務(wù)的基本接口,隱藏任務(wù)所在線程的實現(xiàn)細節(jié)。詳細的介紹我們放到后面,先來了解異步派發(fā)任務(wù)asyncDispatch:派發(fā)任務(wù),并立即返回,返回值是一個可用于取消任務(wù)的接口。 (2)創(chuàng)建Service Ability; 通過工具欄File->New->Ability->Empty Service Ability來創(chuàng)建Service Ability,這樣創(chuàng)建的好處是可以在config.json中自動完成Service Ability的配置。 (3)啟動Service Ability; 這里還可以通過Intent的構(gòu)造元素Parameters來傳遞參數(shù),進行簡單的數(shù)據(jù)傳遞。 (4)連接ServiceAbility 如果Service需要與Page Ability或其他應(yīng)用的Service Ability進行交互,則應(yīng)創(chuàng)建用于連接的Connection。Service支持其他Ability源碼交易通過connectAbility()方法與其進行連接。在使用connectAbility()處理回調(diào)時,需要傳入目標Service的Intent與IAbilityConnection的實例。IAbilityConnection提供了兩個方法供開發(fā)者實現(xiàn):onAbilityConnectDone()用來處理連接的回調(diào),onAbilityDisconnectDone()用來處理斷開連接的回調(diào)。 連接時步驟(1)(2)保持不變,connectAbility中傳入intentService和connection。 這里詳細的創(chuàng)建IDL文件過程可參考《IDL接口使用規(guī)范》和《定義HarmonyOS IDL接口》。這個在后續(xù)的文章中分析討論,目前官方的接口還無法成功回調(diào)onAbilityConnectDone()。 |
|