首頁>技術>

今天我們來聊一下Service Ability,基於Service模板的Ability(以下簡稱“Service”)主要用於後臺執行任務(如執行音樂播放、檔案下載等),但不提供使用者互動介面。Service可由其他應用或Ability啟動,即使使用者切換到其他應用,Service仍將在後臺繼續執行。

這裡就不得不提到另外一個知識點,執行緒。

其實目前我們前面提到的一些UI佈局的繪製都是在主執行緒上進行的,又稱UI執行緒,預設情況下,所有的操作都是在主執行緒上執行,這裡如果我們系統透過ServiceAbility來完成後臺執行任務,我們首先要初步瞭解一下asyncDispatch。

(1)初識TaskDispatcher的非同步派發任務asyncDispatch;

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

Revocable revocable = globalTaskDispatcher.asyncDispatch(new Runnable() {

    @Override        public void run() {            HiLog.info(label, "非同步任務A執行");        }    });

(2)建立Service Ability;

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

(3)啟動Service Ability;

這裡還可以透過Intent的構造元素Parameters來傳遞引數,進行簡單的資料傳遞。

Intent intentService = new Intent();

Operation operation = new Intent.OperationBuilder()

.withDeviceId("").withBundleName("com.codermrye.day10").withAbilityName("com.codermrye.day10.ServiceAbility").build();

intentService.setOperation(operation);

startAbility(intentService);

(4)連線ServiceAbility

如果Service需要與Page Ability或其他應用的Service Ability進行互動,則應建立用於連線的Connection。Service支援其他Ability透過connectAbility()方法與其進行連線。在使用connectAbility()處理回撥時,需要傳入目標Service的Intent與IAbilityConnection的例項。IAbilityConnection提供了兩個方法供開發者實現:onAbilityConnectDone()用來處理連線的回撥,onAbilityDisconnectDone()用來處理斷開連線的回撥。

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

Intent intentService = new Intent();

......

intentService.setOperation(operation);

// startAbility(intentService);

// 連線Service

connectAbility(intentService, connection);

// 建立連接回調例項

private IAbilityConnection connection = new IAbilityConnection() {

// 連線到Service的回撥@Overridepublic void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int resultCode) {    // 在這裡開發者可以拿到服務端傳過來IRemoteObject物件,從中解析出服務端傳過來的資訊}// 斷開與連線的回撥@Overridepublic void onAbilityDisconnectDone(ElementName elementName, int resultCode) {}

};

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

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 日誌分析平臺——ELK安裝配置