2012-12-04 30 views
16

在什麼情況下我應該啓動服務,並在什麼情況下綁定服務?例如 - 音樂服務的Android客戶端?系統優先級的任何差異是否是任何常見規則;還要別的嗎?Android服務:綁定還是啓動?

回答

18

使用startService()爲服務啓動後,它們將獨立運行。音樂播放器是一個很好的例子。這些運行直到他們撥打stopSelf()或有人打電話stopService()

您可以通過發送意圖來回運行的服務進行通信,但在大多數情況下,你只需啓動該服務,並讓它獨立運行。

使用bind()當服務端和客戶端將通信來回的持久連接。一個很好的例子是導航服務,它將把位置更新傳送回客戶端。粘合劑比意圖書寫起來要困難得多,但它們真的是這種用法的一種方式。

關於優先級:當一個進程的所有活動失去了自己的知名度,過程將成爲服務流程如果它承載這是開始onStart()服務,否則就成了一個後臺進程。服務進程比後臺進程具有更高的優先級。更多詳情,請致電android developer site

如果沒有可見的活動相關的服務過程中需要更高的優先級(例如,這確實不應該中斷的音樂播放器),該服務可以調用startForeground()

+2

Google開發者教程提到綁定'「對於需要將活動綁定到自己的服務的音樂應用程序來說非常合適,該服務在後臺播放音樂。」然而,你說這就是startService應該是的用於。我在評論,因爲現在我正在努力解決同樣的問題:綁定或開始。 –

+0

Google開發者教程很糟糕,並且很難領先。 –

+0

真的,無論哪種方式的作品。 startService()通常是將其自身的運行,並綁定服務的最佳選擇()通常是當你的應用程序和服務將在後面不斷的往復溝通的最佳選擇。但是你可以使用Intent與startService()風格的服務進行往復通信,或者你可以使用bind()來啓動一個服務並讓它運行。做任何你想要的方式。坦率地說,活頁夾是很多寫作的工作,所以我避開它們。您也可以使用ResultReceiver,它是Binder周圍的便捷包裝。 –