繁体   English   中英

如何在android服务中处理保持活动连接

[英]how to handle keep alive connection in android Service

我正在使用asmack作为一个Android IM应用程序,我正在使用AIDL接口的远程服务。

在我的服务的onStartCommand方法内部,我编写如下代码。 我创建连接,然后使用它登录。 当任何人在我的应用程序的主要活动的onCreate方法中运行我的应用程序时,运行我的服务getApplicationContext.StartService(serviceIntent) 它运行正常,但是几分钟后(有时10分钟,有时超过10个)我在服务内部附加的messageListener停止接收消息。 但我知道连接存在,因为同时我使用xmppConnection发送消息,它向用户B发送消息,但它没有收听来自用户B的消息。我不知道为什么我的听众停止听到消息。

public int onStartCommand(final Intent intent, final int flags, final int startId) {
    ConnectionConfiguration config = new ConnectionConfiguration(URL, MyPort, Host);
    xmppConnection = new XMPPConnection(config);
    xmppConnection.connect();
    xmppConnection.login("someid@sample.com", "testpass");
    xmppConnection.addPacketListener(myMessageListener, new PacketTypeFilter(Message.class));
    return START_STICKY;
}
private PacketListener myMessageListener = new PacketListener() {
    public void processPacket(Packet packet) {
        Message msg = (Message) packet;
    }
}

请指导。

如果没有您注意到,您的连接是否因错误而关闭? 您应该为每个回调添加连接侦听器和日志以调试连接状态。

在Android上可以有一个“僵尸”插槽:你仍然可以写入它,但收件人永远不会收到消息,当然你将无法从中读取新消息。 它可能在网络状态发生变化后发生。

检测我是否使用XMPP Ping ,从客户端发出警报(每15分钟不重复一次)。 我禁用白色空间保持活力。 这会破坏客户端和服务器(NAT或代理服务器)之间可能存在的大多数超时机制。 另外,如果您没有收到ping的任何答案(例如20秒内),您可以假设连接处于错误状态并手动重新连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM