我使用Android的asmack-android-7-beem库.我有一个后台服务正在运行,例如我的应用程序保持活动状态.但迟早XMPP连接会在没有任何通知的情况下死亡.服务器说客户端仍然在线,但没有发送或接收数据包.
例如,当其他客户端具有新的存在时,客户端不接收任何存在分组.我有XMPPConnection作为我的主要Application类的一个属性.
我ConnectionConfiguration config.setReconnectionAllowed(true)在连接之前设置了.
但重新连接不会发生.XMPPConnection connection.isConnected()返回true.
因此客户端不知道连接实际上已丢失.
有没有办法保持连接活着?
我正在开发一个通过XMPP接收推送通知的应用程序(我知道C2DM,但它有一些限制,我不能因为它而使用),问题是连接一段时间后被垃圾收集而且我不能向Android设备发送推送通知.
我想我需要实现一个Android服务,但我不知道如何实现一个能保持连接活动的服务.有人可以帮帮我吗?
在Internet上搜索了很多之后我们得出了一个结论,为了确保与XMPP服务器保持连接,我们必须创建一个服务,
我们已经创建了一个使用Smack库连接XMPP服务器,并且它可以与移动和Wi-Fi网络一起使用.
每次你做出一些设计方法总是很重要!!!,Smack已经隐藏地实现了这个重新连接机制,在那里监听连接,如果连接丢失,Smack会尝试在某个时间间隔重新连接XMPP服务器.
我们的用例场景::
INTERNET连接可以是因为wifi或数据网络,这里如果连接转是空闲状态有人关闭屏幕cpu进入睡眠现在任何数据都发送到服务器上这个连接将没有响应,因为服务器不再是在监听客户端,在客户端XMPP连接已经处于连接模式,连接监听器没有检测到与服务器的任何断开连接,所以这里流程完成了.
在INTERNET上搜索后,我们发现解决这个问题的可能解决方法是在修复后ping服务器(我们使用1分钟作为修复周期),检测到ping失败后,我们实现了与smack相同的重新连接机制(从Smack重新连接机制中获取的想法)本身)通过利用计时器任务.
问题::我们唯一的问题是电池耗尽,如果用户仍然与INTERNET连接并且重新连接间隔增加,它将耗尽电池.
1).上述问题的可能解决方案是什么?
2).我们应该采取另一种方法吗?