AndroidSocketClient icon indicating copy to clipboard operation
AndroidSocketClient copied to clipboard

建议使用AlarmManager做心跳机制

Open zbl1622 opened this issue 8 years ago • 1 comments

最近我在做一个需要各种维持长连接的应用,同时要用到mqtt和socket。在研究eclipse.paho的mqtt client的时候,我发现在一些机型上,即使发送心跳,安卓系统也有可能让网络连接休眠,从而导致连接中断。paho默认是使用Timer来控制心跳发送的。我经过尝试和研究,发现使用AlarmManager来控制定时发送可以有效避免这种问题。paho的设计非常完善,心跳包发送的模块是可插拔的,可以自己插入一个实现了MqttPingSender接口的对象来控制发送心跳。于是很轻松的在不破坏源码的情况下用Alarm机制替换了原来的Timer机制。我在学习您的源代码过程中,看到您的心跳机制是使用了Handler.postDelayed的机制,经过实验,发现和Timer会导致一样的问题。希望您看到后有空能实验一下。^_^(我认为很可能Alarm机制不占用CPU资源,从而能达到更好的省电效果,从而避免了被系统列入高耗电后台应用从而导致被限制的情况)

zbl1622 avatar Mar 09 '17 11:03 zbl1622

赞同@zbl1622的想法,连接断开后失败回调太快了,延迟回调disconnect,connect方法要调用多次才成功

luoh1234 avatar May 24 '17 10:05 luoh1234