当Android应用进入后台时,Websocket被暂停。

9
我的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 包(Autobahn、okhttp3 等),结果都是相同的。

1个回答

7

我只是想知道为什么循环仍然在运行并输出到日志窗口,但这些消息却没有任何地方去。这种行为是特定于WebSocket一般情况下的吗?还是只适用于这两个WebSocket包? - Chu Bun
即使服务在自己的线程中运行,当主应用程序进入后台时,所有网络活动(不仅仅是WebSocket)似乎都停止了。我猜想在这种情况下使用网络,必须使用前台服务。 - Chu Bun
1
是的,我真的认为使用前台服务会更好。这也可以避免Android操作系统在回收资源以供其他应用程序使用或节省电池时仅仅杀死后台服务的情况。 - Scott Kronheim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接