天天看點

[Android] IntentService使用詳解和執行個體介紹IntentService定義 IntentService與Service的差別 IntentService執行個體介紹

  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中開啟服務

運作結果:

[Android] IntentService使用詳解和執行個體介紹IntentService定義 IntentService與Service的差別 IntentService執行個體介紹

 

  intentservice在oncreate()函數中通過handlerthread單獨開啟一個線程來依次處理所有intent請求對象所對應的任務。  

通過onstartcommand()傳遞給服務intent被依次插入到工作隊列中。工作隊列又把intent逐個發送給onhandleintent()。

注意:  它隻有一個工作線程,名字就是構造函數的那個字元串,也就是“myintentservice”,我們知道多次開啟service,隻會調用一次oncreate方法(建立一個工作線程),多次onstartcommand方法(用于傳入intent通過工作隊列再發給onhandleintent函數做處理)。

版權聲明:請尊重個人勞動成果,轉載注明出處,謝謝!

http://blog.csdn.net/amazing7/article/details/51394846

繼續閱讀