相关疑难解决方法(0)

当Android应用程序进入后台时,Websocket暂停

我的 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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我关闭屏幕或将应用程序发送到后台时,logcat 显示循环正在运行,但远程服务器停止接收测试消息。显然,消息在某处汇集,因为一旦应用程序回到前台,服务器将收到一堆测试消息。这是 Android 上的预期行为吗?我尝试了不同的 Websocket 包(Autobahn、okhttp3、...),结果是一样的。

android websocket autobahnws okhttp3

8
推荐指数
1
解决办法
9629
查看次数

如何在后台保持 iphone ios xmpp 连接活动?

iPhone 的 XMPPFramework 功能强大。我已经启动并运行了,但是如何在后台保持连接超过 10 分钟?我将不胜感激有关如何完成此操作的更多文档/操作方法。

所以用例简单而常见:Joe 在线并且在 iPhone 聊天应用程序中。他离开聊天应用程序并转到 Safari,玩游戏、播放电影以及做其他事情 3 小时(或更长时间)。乔希望在此期间继续接收消息。

示例应用程序允许 Joe 在后台接收本地通知,但似乎只有 10 分钟。这是相关的代码(我认为)。谢谢!

为了帮助其他人,甚至达到这一点,您需要将 xmppstream 属性 enableBackgroundingSocket 设置为 YES(在您应该复制的 iphoneXMPP 示例项目中为您完成)和 appname-info.plist(即 iosChat- info-plist) 文件,您需要添加新的键/值对。您应该右键单击某处并“添加行”。您应该选择“所需的背景模式”键,然后输入“voip”。按下 Enter 后,Xcode 会检测到您的意思是“应用程序提供 IP 语音服务”。这让您有 10 分钟的时间让聊天应用程序在后台保持打开状态(我认为)。但是我们要无限期地,我怀疑答案就在下面的方法中。我是否应该在此方法或其他方法中“重新连接”,例如,[self connect](我有一个连接方法)?

- (void)applicationDidEnterBackground:(UIApplication *)application{

DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

if ([application respondsToSelector:@selector(setKeepAliveTimeout:handler:)]) 
{
    [application setKeepAliveTimeout:600 handler:^{

        DDLogVerbose(@"KeepAliveHandler");

        // Do other keep alive stuff here.
    }];
}}
Run Code Online (Sandbox Code Playgroud)

iphone connection background xmpp ios

1
推荐指数
1
解决办法
7326
查看次数

标签 统计

android ×1

autobahnws ×1

background ×1

connection ×1

ios ×1

iphone ×1

okhttp3 ×1

websocket ×1

xmpp ×1