2010-02-16 54 views
6

我有一個服務來偵聽套接字。當收到某些輸入時,它將創建一個活動。當接收到其他輸入時,它將殺死該活動。我一直努力爭取通過AIDL(http://developer.android.com/guide/developing/tools/aidl.html)與該活動進行溝通,但這似乎並不奏效。我認爲AIDL只有在與其談話的過程是服務而不是活動時纔有效?我很樂意就如何解決我的問題提供一些指導或建議。啓動Activity與其進行通信的服務的最佳方式

乾杯,

回答

9

我有聽一個 插座的服務。當收到某些輸入 它是創建一個活動。

請進行設置。除了在非常異常情況下(例如,套接字是SIP連接並且您正在創建VOIP客戶端),服務不應該開始活動。彈出一個活動會中斷用戶所做的任何事情。

當收到其他輸入時,它是以 殺死這個活動。

我看到這是一個有效模式的唯一場景是當對方掛斷電話線時忽略通話中屏幕。如果你正在創建一個VOIP客戶端,你建議的模式應該是可以的,但是否則,請重新考慮在用戶使用它的過程中活動消失。

我覺得AIDL是唯一有效的,當 就是要說話的過程是一個 服務,而不是當它是一個活動?

不,它通常只在相反的方向上工作,但通常只有在活動是啓動服務並綁定它的活動時。更重要的是,AIDL僅用於跨進程通信。

我喜歡一些方向或 關於如何解決我的 問題的建議。

您沒有真正提供足夠的有關通信性質的信息來給您一個全面的答案。確切地說,該服務試圖告訴該活動?活動是否也試圖與服務進行交流?

從活動到服務的持續通信的推薦模式是使用本地綁定模式。你會在你的SDK示例中找到一個例子,你也可以找到一個here

然後服務具有用於傳送回客戶端選擇:通過回調(例如,在由Smiljanić先生提供的答案Handler)或經由廣播Intents。在回調的情況下,活動需要綁定到服務才能訪問API以提供回調對象。然後該服務將保留該對象並在關鍵事件期間調用該對象上的方法。

如果您的服務在後臺線程上完成其主要工作,則需要確保您的UI操作在UI線程上執行。 Handler是一個方法。

+0

非常好的先生CommonsWare;) – 2010-02-16 17:20:56

相關問題