我一直在对使用持久套接字的Android设备的自定义推送通知解决方案进行一些测试。我想分享我的发现并验证结果。Android持久套接字连接规则
简单说明
的应用程序运行的前景服务并建立与服务器的连接,并认为通过积极的爆震连接(@ 10秒间隔)。如果连接被检测为死亡,应用会一直尝试无限期地重新连接。服务器通过双工通道发送通知。
测试1:
Pinging is done using a timer at 10 second intervals.
Server sends notification every minute.
Applications acquires wifi and wake locks.
Duration : 8 hours
Battery loss : ~14%
试验2:
Pinging is done using AlarmManager at 10 second intervals.
Server sends notification every minute.
Application acquires only a wifilock
Duration : 8 hours
Battery loss : ~7%
假设:传入的网络分组自动唤醒CPU,因此,不需要唤醒锁。使用AlarmManager来ping(而不是定时器)意味着我们不需要唤醒锁。
删除那个唤醒锁确实有助于电池。令人惊讶的是,任何一种解决方案的攻击性ping都不会像我预期的那样影响电池寿命。 (我们进行了许多其他测试,其中包括应用程序刚刚安装了wifilock,并且在同一时间段内没有任何操作导致电池损耗大约为4%至5%)
由于应用程序能够成功发送所有ping请求,接收所有传入的消息,我相信我的假设是正确的。但我很想得到任何专家的确认。
还有一个问题: 如果应用程序是要监听传入连接。在这种情况下,我需要保持一个唤醒锁,对吗?传入的连接不会唤醒CPU?我们不会走这条路,但只是想确认一下。
另外,请不要推荐GCM,它已被公司政策排除。
谢谢。
为什么你让移动平安,如果你有套接字连接?为什么不仅让服务器发送信息,实际上有什么话要说,有时候还可能有心跳来保存它。 – 2013-10-03 07:40:13
在我们的例子中,连接可以在几个开关之间。我们需要尽快确定无效连接。因此,对于移动客户端的每次ping,服务器都必须作出响应。它保护我们免受无声断线。 – Alex 2013-10-07 14:43:09
我确定在这里有一个很好的问题,但我无法找到它目前的形式如果你仍然在寻找答案,你可以考虑编辑一个更具针对性的问题。 JMHO :-) – Chilledrat 2013-10-16 08:42:16