我一直在做的使用持久套接字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(而不是计时器)意味着我们不需要激活锁定。
去除激活锁定似乎真的帮助电池。 出人意料的是,在任的解决方案侵略性爆震并没有影响到电池的使用寿命,就像我本来期望。 (我们有许多其他测试,包括一个在应用刚刚举行了wifilock并没有采取任何行动造成同期约4%至5%的电池损耗)
由于应用程序是能够成功地发送所有的ping请求和接收所有传入的消息,我相信我的假设是正确的。 不过,我很想得到任何一些专家确认。
还有一个问题:如果应用程序是不是侦听传入的连接。 我需要保持在这种情况下,激活锁定,是否正确? 传入连接不唤醒CPU? 我们不走这路线,但只是想确认。
另外,请不要推荐GCM,它已被公司的政策排除。
谢谢。