2016-03-15 45 views
0

我在Android應用程序,它從一個插座連接到藍牙接口,數據中繼工作。對於舒適的溝通我已經實例化,我想同時收聽在秒。此外,我希望服務能夠對諸如藍牙或WiFi連接丟失等事件做出反應。但是,服務應該運行直到在服務器接口上收到特定的退出命令。同時收聽多個流的服務

到目前爲止,我用兩個線程,但我無法弄清楚如何符合我的要求。

SOLUTION

的解決方案是使用一個普通Service代替IntentService的。在我的服務中,我使用了兩種異步方法,分別是AsyncTasks,用於連接到藍牙設備和服務器。一旦連接建立,我開始使用阻止readLine()方法偵聽數據的兩個線程。在服務中,我只是不做任何事情,使主線程免於處理藍牙連接丟失。一旦用戶希望斷開連接,服務就會被我的活動終止。

+1

不要使用'IntentService',而應該使用普通的'Service'。 – waqaslam

回答

1

不要使用IntentService來處理這個問題,而是你自己Service派生實現。 IntentService是設計處理上的一個臨時後臺線程然後完全關閉,一旦所有Intent■找得到處理傳入Intent對象。您已經將大部分沉重的開銷轉移到您自己的後臺線程中,因此不需要使用IntentService。但是,請確保您創建的任何onStartCommand()實現不會執行阻止操作,因爲它是在主線程上執行的。

+0

我打算使用兩種服務,一種用於藍牙連接,另一種用於套接字連接。爲了在這兩者之間中繼數據(例如服務器端收到的數據應發送到藍牙設備),我應該使用常規的「服務」還是綁定的服務。 – Lukas

+0

實際上你可以使用相同的'Service'和你已經設置的兩個不同的線程。探索綁定服務的唯一原因是如果它們運行在不同的進程(應用程序)中,或者您打算將它們在未來的獨立進程中運行。 –