我将 asmack 用于 android IM 应用程序,我在其中使用带有 AIDL 接口(interface)的远程服务。
在我的服务的 onStartCommand
方法中,我编写了如下代码。我创建连接,然后使用它登录。当任何人在我的应用程序的主要 Activity 的 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 分钟一次,不精确重复)。我禁用空白保持 Activity 状态。 这破坏了客户端和服务器(NAT 或代理)之间可能存在的大多数超时机制。 另外,如果您没有收到任何 ping 应答(例如在 20 秒内),您可以假设连接处于错误状态并手动重新连接。
关于android - 如何处理android服务中的保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973850/