0

我正在嘗試深入服務體系結構。
僅用於測試目的,我正在創建音樂應用程序。
毫無疑問音樂應該在服務中播放,但要使用什麼樣的通信? 據我所知服務可以綁定或啓動(或兩者同時)Android綁定服務vs啓動服務音樂應用

首先,我需要播放/停止/暫停/套源...
其次,我需要通知用戶界面如果音樂播放器是關於像進展,緩衝等事件打開...

在這裏,我對此的想法。
我想到混合綁定和啓動服務。

只要歌曲只能從UI設置以及暫停/播放/停止/尋找,我選擇使用活頁夾與UI服務通信。 (綁定服務內部活動,並獲得綁定回與服務通信)

通知像軌道完成,下一個軌道,當前軌道位置來自服務。我決定使用Broadcast receiver發送此類通知,因爲它可能是多個感興趣的組件。

所以我的問題是

  1. 什麼是音樂播放器業務通信(綁定或廣播)的最佳選擇?
  2. 系統如何知道什麼樣的服務是?我的意思是,即使服務是bound我首先需要調用startService方法,然後綁定它。這是否意味着如果即使調用一個方法bindService,它也會被視爲綁定服務,並且在調用unbind方法時會被終止?
  3. LocalBroadcastManager與服務交流有意義嗎?至於LocalBroadcastManager是每個應用程序本地的,爲什麼不使用綁定服務?如果其他應用程序對事件感興趣,則全局廣播很有意義。

請幫忙理解這個機制。

謝謝。

+0

您是否完成音樂應用程序?如果是,您如何管理音樂(播放,暫停,停止...)?通過服務,意向服務或其他?我在你的起點;) –

回答

1
  1. 通信的最佳選擇是根據您的要求使用LocalBroadcasts和Binder方法。如果你想從你的綁定組件如活動中執行某些服務,那麼你應該使用活頁夾。如果您需要將結果發送迴應用程序,則應使用LocalBroadcast。

還有一個選項可用於使用消息傳遞。在這種情況下,活動和服務使用相同的ibinder,因此雙向溝通很容易。您可以發送活動消息到服務和服務到您的活動

  1. 在這一點上,您對啓動綁定服務存在錯誤。在這種情況下,您不需要調用startservice。只需要調用bindservice方法即可。

    bindService(new Intent(this,MessengerService.class),mConnection, Context.BIND_AUTO_CREATE);

您可以將多個組件綁定到此服務。當它們全部解除綁定時,服務將被停止。

  1. 是LocalBroadcastmanagers是有道理的。讓我們說你想在你的應用程序中播出一些東西。有4-5個組件需要更新。你將如何實現這個目標。因此,使用本地廣播是一個很好的功能。

例如,假設有兩項服務從不同的活動開始,第二項服務在第一項服務完成其工作時開始工作。因此,實現這一點的唯一方法是發送廣播,第二項服務將註冊此廣播。因此它會收到它。

+0

謝謝你的回答!我已經忘記了你在答案中提到的東西。該通信可以使用綁定程序進行雙向解析(如使用投射到某個接口的片段和活動)。我認爲,如果綁定服務已經被使用,那麼使用綁定器來實現這個會更容易和更簡潔,只有一件事情,如果其他組件對事件感興趣,最好使用LocarBroadcast,對嗎? – CROSP

+1

是的,你是對的 –

1

是的。服務很難理解。

有些東西很容易。綁定的服務是總是bindService方法開始。已啓動的服務是總是startService方法開始。你做不是需要啓動綁定服務,或綁定啓動的服務。

許多接踵而來的是總的概括...

啓動的服務

一開始服務幾乎是無用的,除非它是一個IntentService。 IntentServices是用於運行異步任務的非常好的工具。您向他們發送一小組參數,然後他們關閉並執行任何參數指示。它們就像void方法一樣,期望使用它們的副作用,而不是返回值。

綁定的服務

甲綁定的服務是難以解釋。雖然這個隱喻在仔細檢查後發生了故障,但這是一種像單件工廠這樣的綁定服務。例如,它是一種爲單個對象提供單一狀態的方法,用於應用程序中的所有活動。其有趣的特性之一是,只要提供單例對象的服務受到約束,託管過程就不太可能被終止。請注意,綁定服務提供的「單例」對象與提供它的服務無關。解除綁定服務而不是使其無效。

綁定服務也是在Android中進行進程間通信的主要手段。

你應該怎麼做?

那麼,這是一個非常普遍的問題。這是一個想法。將音樂播放器放入服務中很有意義。如果與它的溝通主要是一種方式 - 對服務的命令 - 那麼您可以使用IntentService進行溝通。直到有一個特定的理由去做更復雜的事情時,IntentService的優點是更簡單。

+0

謝謝你的完整答案。有什麼好的文章或書籍可以閱讀關於您可以建議的服務內部的內容? – CROSP

+1

不是你想要的答案,我懷疑,但我正在寫一個現在:http://www.amazon.com/Android-Concurrency-G-Blake-Meike/dp/0134177436/ref=sr_1_1?s=books&ie = UTF8&qid = 1454861720&sr = 1-1&keywords = android + concurrency應該在今年第二季度推出。 –