Day10 鴻蒙洞拨,Ability全家桶(二)如何后臺(tái)運(yùn)行任務(wù)

今天我們來(lái)聊一下Service Ability关翎,基于Service模板的Ability(以下簡(jiǎn)稱“Service”)主要用于后臺(tái)運(yùn)行任務(wù)(如執(zhí)行音樂(lè)播放、文件下載等),但不提供用戶交互界面嚷闭。Service可由其他應(yīng)用或Ability啟動(dòng)攒岛,即使用戶切換到其他應(yīng)用,Service仍將在后臺(tái)繼續(xù)運(yùn)行胞锰。

這里就不得不提到另外一個(gè)知識(shí)點(diǎn)灾锯,線程。

其實(shí)目前我們前面提到的一些UI布局的繪制都是在主線程上進(jìn)行的嗅榕,又稱UI線程挠进,默認(rèn)情況下,所有的操作都是在主線程上執(zhí)行誊册,這里如果我們系統(tǒng)通過(guò)ServiceAbility來(lái)完成后臺(tái)運(yùn)行任務(wù),我們首先要初步了解一下asyncDispatch暖璧。

(1)初識(shí)TaskDispatcher的異步派發(fā)任務(wù)asyncDispatch案怯;

那么TaskDispatcher又是什么呢?TaskDispatcher是一個(gè)任務(wù)分發(fā)器澎办,它是Ability分發(fā)任務(wù)的基本接口嘲碱,隱藏任務(wù)所在線程的實(shí)現(xiàn)細(xì)節(jié)。詳細(xì)的介紹我們放到后面局蚀,先來(lái)了解異步派發(fā)任務(wù)asyncDispatch:派發(fā)任務(wù)麦锯,并立即返回,返回值是一個(gè)可用于取消任務(wù)的接口琅绅。

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

    @Override
            
        public void run() {
                    
            HiLog.info(label, "異步任務(wù)A執(zhí)行");
                            
        }
                    
    });

(2)創(chuàng)建Service Ability扶欣;

通過(guò)工具欄File->New->Ability->Empty Service Ability來(lái)創(chuàng)建Service Ability,這樣創(chuàng)建的好處是可以在config.json中自動(dòng)完成Service Ability的配置千扶。

(3)啟動(dòng)Service Ability料祠;

這里還可以通過(guò)Intent的構(gòu)造元素Parameters來(lái)傳遞參數(shù),進(jìn)行簡(jiǎn)單的數(shù)據(jù)傳遞澎羞。

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或其他應(yīng)用的Service Ability進(jìn)行交互髓绽,則應(yīng)創(chuàng)建用于連接的Connection。Service支持其他Ability通過(guò)connectAbility()方法與其進(jìn)行連接妆绞。在使用connectAbility()處理回調(diào)時(shí)顺呕,需要傳入目標(biāo)Service的Intent與IAbilityConnection的實(shí)例。IAbilityConnection提供了兩個(gè)方法供開(kāi)發(fā)者實(shí)現(xiàn):onAbilityConnectDone()用來(lái)處理連接的回調(diào)括饶,onAbilityDisconnectDone()用來(lái)處理斷開(kāi)連接的回調(diào)株茶。

連接時(shí)步驟(1)(2)保持不變,connectAbility中傳入intentService和connection图焰。

這里詳細(xì)的創(chuàng)建IDL文件過(guò)程可參考《IDL接口使用規(guī)范》和《定義HarmonyOS IDL接口》忌卤。這個(gè)在后續(xù)的文章中分析討論,目前官方的接口還無(wú)法成功回調(diào)onAbilityConnectDone()楞泼。

Intent intentService = new Intent();

......

intentService.setOperation(operation);

// startAbility(intentService);

// 連接Service

connectAbility(intentService, connection);

// 創(chuàng)建連接回調(diào)實(shí)例

private IAbilityConnection connection = new IAbilityConnection() {

// 連接到Service的回調(diào)
    
@Override
    
public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int resultCode) {
    
    // 在這里開(kāi)發(fā)者可以拿到服務(wù)端傳過(guò)來(lái)IRemoteObject對(duì)象驰徊,從中解析出服務(wù)端傳過(guò)來(lái)的信息
            
}

// 斷開(kāi)與連接的回調(diào)
    
@Override
    
public void onAbilityDisconnectDone(ElementName elementName, int resultCode) {
    
}

};

(5)最后附上其生命周期的說(shuō)明笤闯。

ServiceAbility生命周期

本文由GZH程序員小小葉發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棍厂,一起剝皮案震驚了整個(gè)濱河市颗味,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牺弹,老刑警劉巖浦马,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異张漂,居然都是意外死亡晶默,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門航攒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磺陡,“玉大人,你說(shuō)我怎么就攤上這事漠畜”宜” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵憔狞,是天一觀的道長(zhǎng)蝴悉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瘾敢,這世上最難降的妖魔是什么拍冠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮簇抵,結(jié)果婚禮上倦微,老公的妹妹穿的比我還像新娘。我一直安慰自己正压,他們只是感情好欣福,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著焦履,像睡著了一般拓劝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘉裤,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天郑临,我揣著相機(jī)與錄音,去河邊找鬼屑宠。 笑死厢洞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躺翻,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丧叽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了公你?” 一聲冷哼從身側(cè)響起踊淳,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤局服,失蹤者是張志新(化名)和其女友劉穎灾茁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茂蚓,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剪芥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年垄开,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片税肪。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溉躲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寸认,到底是詐尸還是另有隱情,我是刑警寧澤串慰,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布偏塞,位于F島的核電站,受9級(jí)特大地震影響邦鲫,放射性物質(zhì)發(fā)生泄漏灸叼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一庆捺、第九天 我趴在偏房一處隱蔽的房頂上張望古今。 院中可真熱鬧,春花似錦滔以、人聲如沸捉腥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抵碟。三九已至,卻和暖如春坏匪,著一層夾襖步出監(jiān)牢的瞬間拟逮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工适滓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敦迄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像罚屋,于是被迫代替她去往敵國(guó)和親苦囱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容