2012-12-23 39 views
6

我有一項通過AIDL與其他服務進行通信的服務。我希望該服務受我應用程序中的活動約束。該服務可以定義兩個活頁夾\界面嗎?我嘗試過使用信使與活動進行交流,重寫「onBind」方法,以便根據其獲取的意圖(一個用於其他服務,一個用於活動)返回不同的活頁夾。可以通過android服務提供兩個接口進行通信嗎?

但是當活動(使用相同的綁定器)從服務中解除綁定時,我有一個錯誤「myService泄漏了ServiceConnection ...最初綁定在這裏」,我相信這是關於服務使用的綁定與其他服務進行溝通。
如果服務不能使用兩個接口,我如何實現活動和服務之間的通信?

謝謝你, -Liron

回答

0

AIDL和Messenger用於IPC與其他應用程序/進程。從Android API Guide

注意:使用AIDL是僅當您允許來自不同應用的客戶端訪問您的IPC服務,並要處理你的多線程服務。如果你不需要在不同的應用程序間執行併發IPC,你應該通過實現一個Binder來創建你的接口,或者,如果你想執行IPC,但不需要處理多線程,可以使用Messenger來實現你的接口。無論如何,確保您在實施AIDL之前瞭解綁定服務。

如果您的活動與服務處於同一進程中,您只需要擴展活頁夾。

擴展粘合劑類

如果您的服務是私人自己的應用程序,並在同一個進程中的客戶端(這是常見的)運行時,你應該通過延長活頁夾創建 接口並從onBind()返回它的實例 。客戶端收到活頁夾並可以使用它來直接訪問活頁夾 實施或甚至服務中的公共方法。當您的服務僅僅是您自己的 應用程序的後臺工作人員時,這是首選技術 。你不會創建你的界面的唯一原因是這種方式是因爲你的服務被其他應用程序或跨越不同的進程使用。

此圖形關於綁定的服務生命週期可以與你是如何結合幫助/解綁定(http://developer.android.com/guide/components/bound-services.html#Lifecycle):

enter image description here

相關問題