Day10 鴻蒙,Ability全家桶(二)如何後臺運行任務

今天咱們來聊一下Service Ability,基於Service模板的Ability(如下簡稱「Service」)主要用於後臺運行任務(如執行音樂播放、文件下載等),但不提供用戶交互界面。Service可由其餘應用或Ability啓動,即便用戶切換到其餘應用,Service仍將在後臺繼續運行。程序員

這裏就不得不提到另一個知識點,線程。json

其實目前咱們前面提到的一些UI佈局的繪製都是在主線程上進行的,又稱UI線程,默認狀況下,全部的操做都是在主線程上執行,這裏若是咱們系統經過ServiceAbility來完成後臺運行任務,咱們首先要初步瞭解一下asyncDispatch。異步

(1)初識TaskDispatcher的異步派發任務asyncDispatch;async

那麼TaskDispatcher又是什麼呢?TaskDispatcher是一個任務分發器,它是Ability分發任務的基本接口,隱藏任務所在線程的實現細節。詳細的介紹咱們放到後面,先來了解異步派發任務asyncDispatch:派發任務,並當即返回,返回值是一個可用於取消任務的接口。工具

(2)建立Service Ability;佈局

經過工具欄File->New->Ability->Empty Service Ability來建立Service Ability,這樣建立的好處是能夠在config.json中自動完成Service Ability的配置。spa

(3)啓動Service Ability;線程

這裏還能夠經過Intent的構造元素Parameters來傳遞參數,進行簡單的數據傳遞。3d

(4)鏈接ServiceAbilityblog

若是Service須要與Page Ability或其餘應用的Service Ability進行交互,則應建立用於鏈接的Connection。Service支持其餘Ability經過connectAbility()方法與其進行鏈接。在使用connectAbility()處理回調時,須要傳入目標Service的Intent與IAbilityConnection的實例。IAbilityConnection提供了兩個方法供開發者實現:onAbilityConnectDone()用來處理鏈接的回調,onAbilityDisconnectDone()用來處理斷開鏈接的回調。

鏈接時步驟(1)(2)保持不變,connectAbility中傳入intentService和connection。

這裏詳細的建立IDL文件過程可參考《IDL接口使用規範》和《定義HarmonyOS IDL接口》。這個在後續的文章中分析討論,目前官方的接口還沒法成功回調onAbilityConnectDone()。

(5)最後附上其生命週期的說明。

ServiceAbility生命週期

本文由GZH程序員小小葉發佈!

相關文章
相關標籤/搜索