Android的持续套接字连接规则(Android persistent socket connec

2019-07-21 03:13发布

我一直在做的使用持久套接字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,它已被公司的政策排除。

谢谢。

Answer 1:

由于一直在这个问题上,没有确认一定的兴趣,我刚才回应。 它已经有一段时间的测试完成后,和生产水平的解决方案已经建立并严格测试。 删除之后仍然锁定帮助电池,并没有什么其他问题,如缺少ping请求或收到的通知,所以这是我在说假设收到的唯一验证。

其他注意事项:

  • 在广播接收器的爆震报警的onReceive方法,如果你不是直接在插座上调用(产生一个新的线程或意图),则需要到ping请求完成后持有唤醒锁。 Android的持有唤醒锁只有等到的onReceive回报,以后有可能(但很少见),该平结束前,CPU可以睡觉。

  • 使用高性能无线上网的锁 ,如果通知是敏感的。

  • 有一个影响解决方案的其他设备特定问题,它覆盖在这里 。

更新

跑进了以下问题与Android 5.1: Android的问题

更新2

需要围绕打盹模式代码为Android 6.0: 打盹模式



文章来源: Android persistent socket connection rules