場景:我有一個Controller
(普通Java類),它必須能夠引導幾個Slave
s。爲什麼AIDL/Messenger綁定到服務?
甲Slave
的性質可以不同,使得它可以是:
- 甲
Service
,讓我們稱之爲一個ServiceSlave
:此對象的生命週期通常是從應用程序的組件(比如說,它的不同之不依賴於當前活動) - 一個簡單的Java類,比方說
ObjectSlave
:此對象的生命週期是有些結合到其所創建的範圍(也就是說,當前活動)
這兩種Slave
有什麼共同點,那就是它們可以駐留在不同的進程。
因爲這最後的「規定」,我馬上把我的注意AIDL
/Messenger
爲Controller
和Slave
之間通信的形式,因爲它提供了IPC。
然而,似乎AIDL
(進而Messenger
,因爲它應該是基於AIDL以及)只被,如果你是一個Service
工作定義。也就是說,我無法實現基於AIDL
的界面,而無需IBinder
對象,該對象通常在onServiceConnected
方法中提供。
第一個問題:可以AIDL
真的只能用於處理Service
嗎?如果是這樣,爲什麼這樣呢?
現在,考慮我的情況。正如任何其他優秀的開發人員一樣,我希望編寫一個優雅的界面,允許Controller
對每個Slave
進行試點,無論其性質如何。到目前爲止,我唯一想到的解決方案包括使用Intent
和BroadcastReceiver
s,全部方便地包裝在專用的Java類中。
第二個問題:這是唯一可行的方法嗎?我在監督什麼?
編輯
我想我應該已經給上什麼Controller
元素實際上沒有更多的細節。它是一個與幾個UI小部件鬆散耦合的組件,他們訂閱了它。它已被設計(自願),因此它不需要參考Context
。所以它不需要需要或直接使用 UI小部件,但這些小部件依次取決於Controller
。
OK,你編輯的信息,我很困惑什麼的真正目標控制器/從屬範例是。如果它完全在你的應用中的「Activity」內部(不需要Context),那麼你根本不需要'Service',AIDL或者'Messenger'。這些都是跨越進程邊界時使用的,或者('Service')有一些不是以UI爲中心的運行。如果您只是將其用作內部發布 - 訂閱類型系統,那麼您必須定義類和接口。這就是說,你可能想看看EventBus或Otto作爲可能的第三方助手。 –
好吧,所以我在解釋這個問題時顯然有問題:)我的主要問題是關於如何在'Controller'和'Slave'之間進行通信,其中後者可能是也可能不是'Service'。通訊必須是進程間的(因爲'Controller'和'Slave'可能運行在不同的進程上),但它也可能在同一進程內。 – Sebastiano
但是,擁有'活動'時只有'Controller'存在嗎? –