android服务的原理,Android学习笔记:IntentService
一般我們所使用的Service是運(yùn)行在主線程當(dāng)中的,所以在Service里面編寫(xiě)耗時(shí)的操作代碼,會(huì)造成主線程卡頓會(huì)ANR。為了解決這樣的問(wèn)題,谷歌引入了IntentService。
如果有一個(gè)任務(wù),可以分成很多個(gè)子任務(wù),需要按照順序來(lái)完成,如果需要放到一個(gè)服務(wù)(Service)中完成,那么使用IntentService是最好的選擇。
一、IntentService的優(yōu)點(diǎn)
(1)它創(chuàng)建一個(gè)獨(dú)立的工作線程來(lái)一個(gè)一個(gè)處理所有Intent。
(2)創(chuàng)建了一個(gè)工作隊(duì)列,來(lái)逐個(gè)發(fā)送Intent給onHandleIntent()
(3)不需要主動(dòng)調(diào)用stopSelf()來(lái)結(jié)束服務(wù),因?yàn)樵创a里面自己實(shí)現(xiàn)了自動(dòng)關(guān)閉。
(4)默認(rèn)實(shí)現(xiàn)了onBind()返回的null。
(5)默認(rèn)實(shí)現(xiàn)了onStartCommand()方法,目的是將intent插入到工作隊(duì)列。
總結(jié):(使用IntentService的好處)首先,省去了手動(dòng)開(kāi)線程的麻煩;第二,不用手動(dòng)停止Service;第三,由于設(shè)計(jì)了工作隊(duì)列,可以啟動(dòng)多次startService(),但是只有一個(gè)Service實(shí)例和一個(gè)工作線程。按順序一個(gè)一個(gè)執(zhí)行。
二、IntentService原理及作用
1、原理
IntentService是繼承Service的一個(gè)抽象類(lèi),它在onCreate()方法中創(chuàng)建了一個(gè)HandlerThread,并啟動(dòng)該線程。HandlerThread是帶有自己消息隊(duì)列和Looper的線程,根據(jù)HandlerThread的looper創(chuàng)建一個(gè)Handler,這樣IntentService的ServiceHandler的HandleMessage()方法就運(yùn)行在子線程中。HandleMessage中調(diào)用了onHandleIntent()方法,它是一個(gè)抽象方法,繼承IntentService類(lèi)需要實(shí)現(xiàn)該方法,把耗時(shí)操作放在onHandleIntent()方法中,等耗時(shí)操作運(yùn)行完成后,會(huì)調(diào)用stopSelf()方法,服務(wù)會(huì)調(diào)用onDestory()方法消毀自己。如果onHandleIntent()方法中的耗時(shí)操作未運(yùn)行完前就調(diào)用了stopSelf()方法,服務(wù)調(diào)用onDestory()方法,但耗時(shí)操作會(huì)繼續(xù)運(yùn)行,直至運(yùn)行完畢。如果同時(shí)多次啟動(dòng)IntentService,任務(wù)會(huì)放在一個(gè)隊(duì)列中,onCreate()和onDestory()方法都只會(huì)運(yùn)行一次。
2、作用
用來(lái)處理后臺(tái)耗時(shí)操作,如讀取數(shù)據(jù)庫(kù)或是本地文件等。
總結(jié)
以上是生活随笔為你收集整理的android服务的原理,Android学习笔记:IntentService的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 谷歌io大会 android p,谷歌I
- 下一篇: android palette组件用法,