我们已经创建了一个使用Smack库连接XMPP服务器,并且它可以与移动和Wi-Fi网络一起使用.
每次你做出一些设计方法总是很重要!!!,Smack已经隐藏地实现了这个重新连接机制,在那里监听连接,如果连接丢失,Smack会尝试在某个时间间隔重新连接XMPP服务器.
我们的用例场景::
INTERNET连接可以是因为wifi或数据网络,这里如果连接转是空闲状态有人关闭屏幕cpu进入睡眠现在任何数据都发送到服务器上这个连接将没有响应因为服务器不再听取客户端,在客户端,XMPP连接已处于连接模式,连接侦听器未检测到与服务器的任何断开连接,因此此处流程已完成.
在INTERNET上搜索后,我们发现解决这个问题的可能解决方法是在修复后ping服务器(我们使用1分钟作为修复周期),检测到ping失败后,我们实现了与smack相同的重新连接机制(从Smack重新连接机制中获取的想法)本身)通过利用计时器任务.
问题::我们唯一的问题是电池耗尽,如果用户仍然与INTERNET连接并且重新连接间隔增加,它将耗尽电池.
1).上述问题的可能解决方案是什么?
2).我们应该采取另一种方法吗?
解决方法
How To Create Service In Android Which Makes Persist Xmpp Connection
With XMPP Server?
两件事情
>通过侦听CONNECTIVITY_CHANGED意图重新建立连接,并确定当前使用的数据连接是否已关闭(并被其他连接替换).
>确保通过ping服务器建立连接
关于的评论
>侦听CONNECTIVY_CHANGED是不够的,您需要将先前活动的连接与现在活动的连接进行比较.如果不一样,请重新建立XMPP连接.
> Smack 4.1附带ServerPingWithAlarmManager,它将根据PingManager每隔30分钟的设置检查是否需要ping.此值是硬编码的,无法更改.
使用1分钟作为Ping间隔是很多的方式!正如您所经历的那样,它会非常快地耗尽电池电量.合理的ping间隔是> 15分钟,我建议30分钟. Smack 4.1还将确保仅在没有收到带有Ping间隔的节的情况下才发送ping.
如果可能,也使用XEP-0198:流管理.
我建议您查看遵循这些指南的各种开源应用程序,以实现稳定,持久的连接,而不会耗尽用户电池1.
1:遵循这些建议不能保证电池耗尽.还有更多因素需要考虑.