2015-06-10 157 views
0

在我的程序中,我通過IntentService類中的套接字接收數據,然後將其作爲廣播發送給活動。活動處理輸入並準備輸出。IntentService中的套接字監聽器

while (true) { 

      socket = serverSocket.accept(); 

      //Read data from socket 

      //Publishing as a broadcast } 

現在的問題是

  1. 我如何發送輸出從活動到intentService? 我知道我可以向intentService發起一個新的意圖,但由於我的while循環已經在無限循環中運行,這不會排隊並可能永遠不會執行嗎?
  2. 即使我設法從活動中獲取數據到intentService,我怎樣才能使用相同的套接字連接來回寫客戶端,還是應該爲同一個創建單獨的線程?

任何洞察將有所幫助。

+0

你的意思是你想讓這個循環繼續並同時讀取循環內部活動發送的數據? – 7383

+0

是類似的東西 – Raghav

+0

您可以將數據添加到隊列中並從循環中的隊列中獲取 – 7383

回答

1

IntentService是此行爲的錯誤選擇。您應該使用常規Service並自行管理線程和連接。

然後,您可以通過調用startService()包含數據的Intent將數據從活動發送到服務,或者您可以讓活動綁定到服務並使用AIDL(遠程過程調用)。

+0

我實際上最終使用了一個Singleton,並在工作線程中創建了套接字偵聽器,並對其進行管理。 – Raghav

1

我認爲你應該改變你的實現,因爲IntentService只有一個線程,並且被accept調用阻塞。可能你應該創建兩個獨立的線程來接受連接並處理連接的套接字。使用這種方法,您可以使用靜態對象或廣播接收器輕鬆地將數據共享到連接的套接字線程。從android sdk中引用Bluetoothchat示例。

+0

感謝您指出問題和樣本 – Raghav

+0

很高興聽到您已解決問題。 – 7383