如何在Android中创建服务与XMPP服务器保持持久的Xmpp连接?

Dev*_*Dev 6 android xmpp asmack

在Internet上搜索了很多之后我们得出了一个结论,为了确保与XMPP服务器保持连接,我们必须创建一个服务,

我们已经创建了一个使用Smack库连接XMPP服务器,并且它可以与移动和Wi-Fi网络一起使用.

每次你做出一些设计方法总是很重要!!!,Smack已经隐藏地实现了这个重新连接机制,在那里监听连接,如果连接丢失,Smack会尝试在某个时间间隔重新连接XMPP服务器.

我们的用例场景::
INTERNET连接可以是因为wifi或数据网络,这里如果连接转是空闲状态有人关闭屏幕cpu进入睡眠现在任何数据都发送到服务器上这个连接将没有响应,因为服务器不再是在监听客户端,在客户端XMPP连接已经处于连接模式,连接监听器没有检测到与服务器的任何断开连接,所以这里流程完成了.

在INTERNET上搜索后,我们发现解决这个问题的可能解决方法是在修复后ping服务器(我们使用1分钟作为修复周期),检测到ping失败后,我们实现了与smack相同的重新连接机制(从Smack重新连接机制中获取的想法)本身)通过利用计时器任务.

问题::我们唯一的问题是电池耗尽,如果用户仍然与INTERNET连接并且重新连接间隔增加,它将耗尽电池.

1).上述问题的可能解决方案是什么?

2).我们应该采取另一种方法吗?

Flo*_*low 6

如何在Android中创建服务与XMPP服务器保持持久的Xmpp连接?

两件事情

  1. 通过侦听CONNECTIVITY_CHANGED意图重新建立连接,并确定当前使用的数据连接是否已关闭(并被其他连接替换).
  2. 通过ping服务器确保建立连接

关于的评论

  1. 听取CONNECTIVY_CHANGED是不够的,您需要将先前活动的连接与现在活动的连接进行比较.如果不一样,请重新建立XMPP连接.
  2. Smack 4.1附带ServerPingWithAlarmManager,它将根据PingManager 每隔30分钟的设置检查是否需要ping .此值是硬编码的,无法更改.

使用1分钟作为Ping间隔是很多的方式!正如您所经历的那样,它会非常快地耗尽电池电量.一个合理的ping间隔是> 15分钟,我建议30分钟.Smack 4.1还将确保仅在没有收到带有Ping间隔的节的情况下才发送ping.

如果可能,也使用XEP-0198:流管理.

我建议您查看遵循这些指南的各种开源应用程序,并在不耗尽用户电池的情况下实现稳定,持久的连接1.

1:遵循这些建议不能保证电池耗尽.还有更多因素需要考虑.