2011-10-14 97 views
119

能否請你幫我瞭解的IntentServiceService之間的區別?IntentService和服務有什麼區別?

+1

http://techtej.blogspot.com.es/2011/03/android-thread-constructspart-4.html –

+5

真的比較不錯的位置: http://stackoverflow.com/questions/15524280/service-vs-intent-service – Moemars

+1

請轉到上面的鏈接,他們真的太好了..非常感謝他們...... –

回答

110

總之,一個服務是爲開發者設立後臺操作在更大範圍實施,而一個IntentService是有用的「發射後不管」作戰,照顧後臺線程的創建和清理。

從文檔:

服務 A服務是表示任一應用程序的同時不與用戶交互以執行一個較長的運行的操作或用於其他應用程序使用提供的功能的慾望的應用組件。

IntentService 服務是IntentService 服務是處理需求(表示爲意圖)異步請求的基類。客戶通過startService(Intent)呼叫發送請求;該服務根據需要啓動,使用工作線程輪流處理每個Intent,並在其停止工作時自行停止。

請參閱本文檔 - http://developer.android.com/reference/android/app/IntentService.html

+6

IntentService不是服務的基類。它的反面是真的。檢查 - http://developer.android.com/reference/android/app/IntentService.html – Darpan

+5

@Darpan它是「處理異步請求的服務」的基類,而不是簡單的「服務」。這就是爲什麼上面的句子是正確的。 – nucleo

+0

大家好,我可以在Service中編寫IntentService嗎?如果是的話,任何人都可以提供一個示例/代碼片段。謝謝 –

58

服務:它運行在您的系統上的背景。例如,

  1. 如果你去一個酒店,你給你的湯以服務器
  2. 的服務器獲取您的訂單,發送到廚師
  3. 你不知道的湯怎麼是在廚房裏,什麼工藝製成所需要的做的湯
  4. 一旦您的訂單已準備就緒,服務器爲您帶來的湯。

後臺進程:廚師制湯

IntentService: - 它是連續的服務。(即)當你在一個時間服務器訂購許多食品項目,但該服務器由一個提供這些項目之一,不一次全部交付。

+7

我喜歡你的解釋風格。 –

+2

對不起,但它缺少兩者之間的重要區別.. – eRaisedToX

+0

你是什麼意思的「連續服務」? –

12

Service運行實際上是在你的應用程序的同一個線程;當你擴展Service時,你必須手動產生新線程來運行CPU阻塞操作。

VS

IntentServiceService子類,可以產生一個線程從那裏做後臺工作(無需創建一個新的線程做CPU阻塞操作)。

+0

是不是爲了防止CPU阻塞操作,而不是運行它們?林不知道雖然 – committedandroider

+0

多數民衆贊成那是真的,服務neew一個新的線程運行CPU阻止操作 –

91

Service是一個基類服務實現的。 Service在應用程序的主線程中運行,這可能會降低應用程序的性能。因此,IntentService是Service的一個直接子類,可以讓事情變得更簡單。

IntentService的用於在後臺執行特定任務。一旦完成,IntentService的實例將自動終止。它的用法示例是從互聯網下載某個資源。

差異

  1. Service類使用應用程序的主線程,而IntentService創建工作線程,並使用該線程來運行服務。
  2. IntentService創建一個隊列,每次傳遞一個意向到onHandleIntent()。因此,應該通過直接擴展Service類來實現多線程。 Service班級需要使用stopSelf()進行手動停止。同時,IntentService完成執行時自動自動停止。
  3. IntentService implements onBind()返回null。這意味着IntentService不能被默認綁定。
  4. IntentService執行onStartCommand()發送意圖排隊和onHandleIntent()

簡而言之,使用IntentService只有兩件事要做。首先,實施構造函數。其次,實施onHandleIntent()。對於其他回調方法,需要調用super才能正確跟蹤它。

+0

尼斯的解釋。我正在製作音樂應用程序。那麼,哪一個很好呢?服務或IntentService? –

+7

音樂應用程序,我認爲你必須使用服務,因爲默認情況下,IntentService是不可取的,我認爲,你必須綁定你的音樂應用程序與音樂服務開始,停止。如前所述,IntentService更適合「開始並忘記」 – Premier

+0

@Premier IntentService與Service.START_NOT_STICKY類似嗎?根據你的例子,這也是「開始和忘記」。 –

3

差異

  1. 服務類使用應用程序的主線程,而IntentService創建工作線程,並使用該線程來運行服務。
  2. IntentService創建一個隊列,每次將一個意圖傳遞給onHandleIntent()。因此,應該通過直接擴展Service類來實現多線程。
  3. 服務類需要使用stopSelf()手動停止。同時,IntentService在隊列中沒有意圖時會自動停止。
  4. IntentService實現了返回null的onBind()。這意味着IntentService不能默認綁定。
  5. IntentService實現了將Intent發送到隊列和onHandleIntent()的onStartCommand()。
+1

不服務也實現onStartCommand? –

5

Service:工作在主線程所以它會在幾秒鐘後引起ANR(安卓無響應)。

IntentServiceService與另一個後臺線程單獨工作,以執行某些操作而不與主線程交互。

+0

*服務:在主線程中工作,所以它會在幾秒鐘後導致ANR(Android Not Responding)。* - 我可以有一個服務運行幾個小時,我從來沒有見過一個ANR,所以我懷疑是真的。 –

1

意圖服務IntentService的服務

孩子:如果你想使用您的應用開始下載一堆圖像。這是一次性的過程,一旦下載完成,就可以自行清理。

服務:將不斷用於在您的應用程序和後端與Web API調用之間進行通信的服務。即使是與目前的任務完成了,你還希望它是圍繞着幾分鐘後,更多的通信

9

服務

  • 任務沒有用戶界面,但不應該長期任務使用。通過onStartService()
  • 從任何線程觸發使用服務內螺紋長期任務
  • 調用
  • 運行在主線程
  • 可能會阻止main(UI)螺紋

IntentService

  • 長期任務通常不會與主要的溝通如果需要的話通信則其由處理程序進行,或者經由意圖
  • 從主線程觸發廣播
  • 調用讀取(意圖是在主螺紋和工作線程接收到spawed
  • 運行在獨立的線程
  • 我們無法並行運行任務,並且多個意圖在同一個工作線程上排隊。
3

服務

這是爲大家服務的基類。擴展此類時,重要的是創建一個新線程來執行所有服務的工作,因爲該服務默認使用應用程序的主線程,這可能會降低應用程序運行的任何活動的性能。

IntentService

這是使用工作線程來處理所有的請求開始,一次一個服務的一個子類。如果您不要求您的服務同時處理多個請求,則這是最佳選擇。你所需要做的就是實現onHandleIntent(),它接收每個啓動請求的意圖,這樣你就可以完成後臺工作。

差異

服務類使用應用程序的主線程,而IntentService創建工作線程,並使用該線程來運行服務。 IntentService創建一個隊列,每次將一個意圖傳遞給onHandleIntent()。因此,應該通過直接擴展Service類來實現多線程。 服務類需要使用stopSelf()手動停止。同時,IntentService在隊列中沒有意圖時會自動停止。 IntentService實現了返回null的onBind()。這意味着IntentService不能默認綁定。 IntentService實現了將Intent發送到隊列和onHandleIntent()的onStartCommand()。

31

查看Tejas Lagvankar的post關於此主題。 以下是Service和IntentService及其他組件之間的一些主要差異。

enter image description here

+1

很好的表格信息 –

相關問題