intentservice繼承與service,用來處理異步請求。用戶端可以通過startservice(intent)方法傳遞請求給intentservice。intentservice在oncreate()函數中通過handlerthread單獨開啟一個線程來依次處理所有intent請求對象所對應的任務。
這樣以免事務處理阻塞主線程(ANR)。執行完所一個intent請求對象所對應的工作之後,如果沒有新的intent請求達到,則**自動停止**service;否則執行下一個intent請求所對應的任務。
intentservice在處理事務時,還是采用的handler方式,建立一個名叫servicehandler的内部handler,并把它直接綁定到handlerthread所對應的子線程。 servicehandler把處理一個intent所對應的事務都封裝到叫做onhandleintent的虛函數;是以我們直接實作虛函數onhandleintent,再在裡面根據intent的不同進行不同的事務處理就可以了。
另外,intentservice預設實作了onbind()方法,傳回值為null。
使用intentservice需要實作的兩個方法:
構造函數
intentservice的構造函數一定是參數為空的構造函數,然後再在其中調用super(“name”)這種形式的構造函數。因為service的執行個體化是系統來完成的,而且系統是用參數為空的構造函數來執行個體化service的
實作虛函數onhandleintent
在裡面根據intent的不同進行不同的事務處理。
好處:處理異步請求的時候可以減少寫代碼的工作量,比較輕松地實作項目的需求。
service不是獨立的程序,也不是獨立的線程,它是依賴于應用程式的主線程的,不建議在service中編寫耗時的邏輯和操作,否則會引起anr。
intentservice 它建立了一個獨立的工作線程來處理所有的通過onstartcommand()傳遞給服務的intents(把intent插入到工作隊列中)。通過工作隊列把intent逐個發送給onhandleintent()。
不需要主動調用stopselft()來結束服務。因為,在所有的intent被處理完後,系統會自動關閉服務。
預設實作的onbind()傳回null。
然後記得在manifest.xml中注冊服務
最後在activity中開啟服務
運作結果:

intentservice在oncreate()函數中通過handlerthread單獨開啟一個線程來依次處理所有intent請求對象所對應的任務。
通過onstartcommand()傳遞給服務intent被依次插入到工作隊列中。工作隊列又把intent逐個發送給onhandleintent()。
注意: 它隻有一個工作線程,名字就是構造函數的那個字元串,也就是“myintentservice”,我們知道多次開啟service,隻會調用一次oncreate方法(建立一個工作線程),多次onstartcommand方法(用于傳入intent通過工作隊列再發給onhandleintent函數做處理)。
版權聲明:請尊重個人勞動成果,轉載注明出處,謝謝!
http://blog.csdn.net/amazing7/article/details/51394846