大部分人可能都只聽過Service或者只使用過Service。而IntentService卻沒有使用過。其實IntentService也是Service的子類。?它的出現(xiàn)是為了調(diào)用起來更加方便并且默認在HandlerThread中運行不需要再開新的線程。Ok下來就來了解了解他們的區(qū)別及用法吧(首先請先確定你對Service有基本了解如果還沒有可以查看郭神的這篇文章http://blog.csdn.net/guolin_blog/article/details/11952435)
IntentService使用相比Service要簡單很多,繼承IntentService創(chuàng)建構(gòu)造函數(shù)并覆寫onHandleIntent方法就足夠了。你可以像開啟一個Service一樣使用StartService方法開啟IntentService(當(dāng)然別忘了在AndroidManifest.xml中注冊Service)。
public class MyIntentService extends IntentService {
/**
* 必須創(chuàng)建構(gòu)造方法
* “MyIntentService”就是worker thread的名字
*/
public MyIntentService() {
super("MyIntentService");
}
/**
* 方法中就是具體邏輯的執(zhí)行
*/
@Override
protected void onHandleIntent(Intent intent) {
//做你想做的事情
}
}
如果你只是想知道它怎么使用的話下面的就不需要看了
首先在使用時我們要先知道它和Service有什么區(qū)別為什么有了IntentService這個類,下面就以下幾個不同來展開解釋
- 默認使用HandlerThread不需要再開新在線程
- 以隊列的方式處理任務(wù)
- 在任務(wù)執(zhí)行完畢后會自動結(jié)束服務(wù)
默認使用HandlerThread不需要再開新在線程
進入源碼可以看到在onCreate方法中創(chuàng)建了HandlerThread及Handler,并且HandlerThread中的name也就是我們構(gòu)造方法中的參數(shù)。這下就清楚了為什么不需要新建線程了

以隊列的方式處理任務(wù)
我們都知道Service如果存在是不會再次創(chuàng)建的。而是調(diào)用onStartCommand方法
所以查看onStartCommand方法發(fā)現(xiàn)它是使用message將新的Intent添加到隊列中。同時也就解釋了為什么使用IntentService時任務(wù)是一個個執(zhí)行的。


在任務(wù)執(zhí)行完畢后會自動結(jié)束服務(wù)
通過源碼可知每次執(zhí)行完onHandleIntent方法后都會調(diào)用stopSelf檢查id如果為最后個任務(wù)id則停止服務(wù)。而onDestroy方法中調(diào)用了mServiceLooper.quit();方法去清空任務(wù)


至此。IntentService的面紗就都揭開了。源碼也是非常的簡單。