如何处理android服务中的保持连接
Posted
技术标签:
【中文标题】如何处理android服务中的保持连接【英文标题】:how to handle keep alive connection in android Service 【发布时间】:2012-08-15 17:11:15 【问题描述】:我将 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;
请指导。
【问题讨论】:
请格式化您的代码并为您的帖子选择一个好的标题。 问题是我的连接存在但它停止监听数据包。使用该连接我调用 sendPacket 工作正常但不知道为什么它停止监听传入数据包。我检查我的服务也在运行在后端,因为我可以从服务中发送数据包来发送消息数据包,请指导。我面临与下面链接中发布的相同问题。 ***.com/questions/5040852/… 您发布的链接似乎已被回答---->***.com/questions/5040852/… 不。我也遵循这些步骤。看起来我的服务仍然存在,但 xmpp 连接侦听器出现问题。它停止侦听数据包。Logcat 没有显示与销毁服务相关的任何内容。 【参考方案1】:您的连接是否在您不注意的情况下因错误而关闭? 您应该为每个回调添加一个连接侦听器和一个日志以调试连接状态。
在 Android 上,可能有一个“僵尸”套接字:您仍然可以对其进行写入,但收件人永远不会收到消息,当然您也无法从中读取新消息。 它可能在网络状态更改后发生。
检测我使用XMPP Ping,从客户端从警报启动(每 15 分钟不精确重复)。我禁用了空白保持活动。 这会破坏客户端和服务器(NAT 或代理)之间可能存在的大多数超时机制。 另外,如果您没有收到任何 ping 响应(例如 20 秒内),您可以假设连接处于错误状态并手动重新连接。
【讨论】:
亲爱的 Guillaume Perrot:感谢您的回复。我面临一个奇怪的问题。我正在使用 AIDL 服务来处理我的保持连接。我正在发送和接收工作正常的消息。但是使用 XMPP 对象我向它发送请求数据包的用户发送订阅邀请请求。但是这里的问题是它的数据包侦听器停止侦听传入的数据包。同时我尝试使用相同的 xmpp 对象发送数据包,它发送正常但接收停止以听到传入的数据包。发送邀请请求后,它看起来 xmpp 数据包侦听器受到干扰。请指导。 . AndroidDebugger 类(常规 Smack 上的 ConsoleDebugger)可用于打印套接字上实际读取或写入的内容,而无需使用 PacketListener API。当您的侦听器停止工作时,您应该检查是否在调试器的日志中收到数据包。以上是关于如何处理android服务中的保持连接的主要内容,如果未能解决你的问题,请参考以下文章
mongodb 连接如何处理 NodeJS express 服务器中的并发请求?