IntentService使用詳解及與Service差別

大部分人可能都只聽過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)建了HandlerThreadHandler,并且HandlerThread中的name也就是我們構(gòu)造方法中的參數(shù)。這下就清楚了為什么不需要新建線程了

image.png

以隊列的方式處理任務(wù)

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

image.png
image.png

在任務(wù)執(zhí)行完畢后會自動結(jié)束服務(wù)

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

image.png

image.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容