IntentService簡介
IntentService是Service類的子類,用來處理異步請求。客戶端可以通過startService(Intent)方法傳遞請求給IntentService。
IntentService在onCreate()函數中通過HandlerThread單獨開啓一個線程來處理所有Intent請求對象(通過startService的方式發送過來的)所對應的任務,這樣以免事務處理阻塞主線程。執行完所一個Intent請求對象所對應的工作之後,如果沒有新的Intent請求達到,則自動停止Service;否則執行下一個Intent請求所對應的任務。
IntentService在處理事務時,還是採用的Handler方式,創建一個名叫ServiceHandler的內部Handler,並把它直接綁定到HandlerThread所對應的子線程。 ServiceHandler把處理一個intent所對應的事務都封裝到叫做onHandleIntent的虛函數;因此我們直接實現虛函數onHandleIntent,再在裏面根據Intent的不同進行不同的事務處理就可以了。
另外,IntentService默認實現了Onbind()方法,返回值爲null。
使用IntentService需要兩個步驟:
1. 寫構造函數
2. 實現虛函數onHandleIntent,並在裏面根據Intent的不同進行不同的事務處理就可以了。
好處:
處理異步請求的時候可以減少寫代碼的工作量,比較輕鬆地實現項目的需求
注意:
IntentService的構造函數一定是參數爲空的構造函數,然後再在其中調用super("name")這種形式的構造函數。
因爲Service的實例化是系統來完成的,而且系統是用參數爲空的構造函數來實例化Service的關於Handler和Service的更多知識請閱讀《Looper和Handler》,《關於Handler技術》,《Service簡介》,《AIDL和Service實現兩進程通信》