[英]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.