簡體   English   中英

當Android應用程序進入后台時,Websocket暫停

[英]Websocket paused when android app goes to background

我的Android應用程序啟動了一個服務,該服務打開了一個Websocket來與遠程服務器進行通信。 該服務產生一個線程,其運行方法如下所示。

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軟件包(高速公路,okhttp3等),結果是相同的。

如果要確保在應用程序的UI處於后台時可以繼續運行此功能,則需要使該服務作為前台服務運行。 關於使用前台服務有一些限制/准則,請參閱https://developer.android.com/guide/components/services.html上的文檔。

另外,如果這項工作需要定期進行,並且不需要連續運行,則可以使用JobScheduler。 請參閱https://developer.android.com/topic/performance/scheduling.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM