2012-12-11 76 views
1

我已經經歷了一些Stackoverflow上的主題,但無法找到任何足夠的答案「多個活動如何與android中的綁定服務交流?」。我在我的應用程序和2個活動中有一個簡單的綁定服務。我已經建立了服務和活動之間的溝通,但現在我在應用程序中增加了一項活動。Android本地服務如何與應用程序中的多個活動進行通信?

作爲主要活動的活動A將從服務中獲取一些數據。服務正在與一個Servlet進行通信並從servlet中獲取數據,我將發送給我的活動A,並且此活動將顯示數據。我正在通過點擊一個按鈕來從活動A中調用一項新活動。活動A將向活動B發送一些數據。我正在使用Intent在活動A和B之間共享數據。活動B有一些按鈕,它們將更新活動B中的數據並將其發送到服務,服務會將響應發送回活動B.

我知道活動如何與服務進行通信,但我不知道服務如何與2個或更多活動進行通信。

回答

1

在您的活動B中與您的Service通信的方式與您在活動A中的操作方式相同。我假設您正在註冊某種形式的BroadcastReceiver,它在活動A中監聽來自該服務的內容。您可以在B以及兩個活動都將收到廣播。

如果您想從活動B向服務發送命令,您可以使用慣用的startService將意向發送回該服務。這不會重新啓動您的服務,但它只會重新向服務發出一條新命令,您可以通過在服務中實現onStartCommand函數來攔截該服務。您可以藉助此生命週期圖here閱讀有關您的服務功能的更多信息。

因此,您可以在您的清單中爲這兩種活動註冊您的廣播接收意圖,或者您可以在代碼中通過開始在onStart中的兩個活動上收聽相同的意圖過濾器,然後再次關閉它們你的onPause。

+0

如果我沒有BroadCastReceiver,那麼有沒有其他方式與服務進行通信? – Dennis

1

如果您的活動擴展了BroadcastReceiver,它們將偵聽從應用程序發送的廣播。在您的服務中,您需要在想要與您的活動進行溝通時調用sendBroadcast(意向意向)。

在AndroidManifest.xml文件中,您需要將意向過濾器添加到您希望服務與之通信的活動中,其中包括意圖的活動名稱。如果你想發送不同的意圖,我相信你需要給他們不同的行動名稱。

這是一個example如何實現這樣的事情。

+0

謝謝你的回答。如果我想發送不同的意圖到活動,請告訴我你的意思是不同的行動名稱? – Dennis

+0

還有一個問題。如果我不想用BroadcastReceiver擴展我的活動,那麼如何? – Dennis

+0

因此,當您創建一個意圖時,您可以設置一個操作名稱。一些沿着intent.setAction(「nameofyouraction」)行的東西。例如,您有活動A和B.活動A想要偵聽名爲「activityAaction」的意圖,而活動B偵聽「activityBaction」。當你創建A的意圖時,你可以調用intent.setAction(「activityAaction」)等等。在您的AndroidManifest文件中,您需要將該操作名稱註冊到ActivityA。您可以創建一個擴展BroadcastReceiver的內部類(在您的活動中)。 –

相關問題