2013-02-27 113 views
3

如果我與服務交互的方式是單向的(即只有呼叫服務做某事而不詢問結果)。什麼是這兩種方法之間的差異onStartCommand意向動作與綁定服務

  1. startService(intent)onStartCommand做任務取決於intent.getAction
  2. 綁定服務,並使用Messenger發送消息給服務。因此,該服務根據消息完成任務。

這裏是一個區別,我可以認爲(我不知道):
對於方法1,我們需要每一個我們稱之爲startService時間創建服務,所以超載是我們需要每次創建服務除非使用START_STICKY

回答

2

有幾個不同,但最重要的是線程管理。

IntentService 如果您使用Intent服務,則在單個守護程序線程中調用onHandleIntent。每次對startService的新調用都將顯示爲對onHandleIntent的按序排隊調用。結果很簡單,表現良好,在守護進程線程上按順序執行調用。順便說一句,直到隊列爲空的服務不會停止自己:沒有必要在相同的應用程序,以「重建」

綁定的服務 有,實際上,兩種情況綁定服務。如果它在您的進程中運行,該服務將在UI線程上運行。如果你需要運行關閉 UI線程,你將不得不建立自己的線程(可能是一個Looper),並因此與Messenger交談。結果更靈活(線程數量,排隊順序等由您決定),但與IntentService非常相似。在另一個應用

綁定的服務 如果被綁定的服務屬於不同的應用程序,你給它調用幾個連結線的一個運行。您不需要管理這些線程,它們由框架提供。但是,他們可以按順序執行您的呼叫。

+0

謝謝,但onStartCommand呢? – Bear 2013-02-28 01:56:30

+0

所有服務都有一個onStartCommand方法。您可以在我描述的三種情況中的任何一種情況下,在onStartCommand服務中處理intent.getAction。這不是一個顯着的特徵。 – 2013-02-28 04:41:32