0
我的android應用程序啓動一個服務,該服務打開一個websocket以與遠程服務器進行通信。該服務產生一個線程,其運行方法如下所示。Websocket在Android應用程序轉到後臺時暫停
public void run() {
try {
super.run();
for(int i = 1; i < 1000; i++) {
Log.d(TAG, String.format(" *** Iteration #%d.", i));
Thread.sleep(3000); // Dummy load.
mWebsocket.sendTextMessage("Test");
}
}
catch (Exception exc) {
Log.d(MY_TAG, "MyThread.run - Exception: " + exc.getMessage());
}
}
當我關閉屏幕或發送該應用的背景下,logcat的示出了循環運行,但遠程服務器停止接收測試消息。顯然,這些消息正在彙集到某處,因爲一旦應用程序返回到前臺,服務器將收到一堆測試消息。這是Android上的預期行爲嗎?我嘗試了不同的Websocket包(Autobahn,okhttp3,...),結果是一樣的。
我只是想知道爲什麼循環仍在運行並輸出到logcat,但消息不會去任何地方。這種行爲是否特定於一般websocket?到這兩個websocket包? –
即使服務在自己的線程中運行,它看起來像所有的網絡活動,而不僅僅是當主應用程序轉到後臺時停止websocket。我想在這種情況下使用網絡,前臺服務必須使用。 –
是的,我真的認爲你會更好的前景服務。這也將避免Android操作系統將殺死您的後臺服務以回收其他應用資源或節省電量的時間。 –