IntentService是Service的子類(lèi),可根據(jù)需要異步處理請(qǐng)求锻拘∮涂裕客戶(hù)端通過(guò)Context.startSerivce(Intent)呼叫請(qǐng)求,服務(wù)根據(jù)需要自動(dòng)啟動(dòng)署拟,結(jié)束后自動(dòng)關(guān)閉婉宰。
IntentService有自己的線(xiàn)程(子線(xiàn)程),即不在主線(xiàn)程上處理每個(gè)intent推穷,當(dāng)工作失敗時(shí)心包,會(huì)自行停止。
所有的請(qǐng)求都會(huì)在一個(gè)工作線(xiàn)程處理馒铃,即使他們可能需要很長(zhǎng)時(shí)間蟹腾,但是一次只能處理一個(gè)請(qǐng)求痕惋,即多次調(diào)用startService時(shí),會(huì)多次請(qǐng)求娃殖,這些請(qǐng)求會(huì)進(jìn)入IntentService線(xiàn)程的隊(duì)列中值戳,該隊(duì)列的所有請(qǐng)求都是同步進(jìn)行的,即一個(gè)一個(gè)來(lái)炉爆,一次只能處理一個(gè)請(qǐng)求堕虹,弄完了在下一個(gè)。
由于onStartCommand方法是在主線(xiàn)程完成的叶洞,而IntentService是在自己的線(xiàn)程鲫凶,非主線(xiàn)程工作,所以IntentService不能在onStartCommand里面寫(xiě)方法衩辟。
特點(diǎn)
IntentService自帶線(xiàn)程螟炫,當(dāng)我們用service做耗時(shí)操作,比如網(wǎng)絡(luò)請(qǐng)求時(shí)艺晴,可以使用這個(gè)昼钻。
使用IntentService時(shí),我們的工作內(nèi)容要放在onHandleIntent里面封寞,當(dāng)我們調(diào)用startService(intent)啟動(dòng)了IntentService之后然评,最終Android Framework會(huì)回調(diào)其onHandleIntent方法,并將intent傳入該方法狈究,這樣我們就可以根據(jù)intent去做實(shí)際工作碗淌,并且onHandleIntent運(yùn)行在IntentService所持有的工作線(xiàn)程中,而非主線(xiàn)程抖锥。(本段轉(zhuǎn)載:詳解Android中IntentService的使用方法)
多次啟動(dòng)IntentService亿眠,產(chǎn)生多個(gè)任務(wù),但是onHandleIntent一次只處理一個(gè)任務(wù)磅废,所有的任務(wù)會(huì)按順序一個(gè)一個(gè)的執(zhí)行纳像。所有任務(wù)執(zhí)行完時(shí),自動(dòng)onDestroy拯勉。