相关疑难解决方法(0)

Android持久套接字连接规则

我一直在使用持久套接字对Android设备的自定义推送通知解决方案进行一些测试.我想分享我的发现并验证结果.

简单描述
应用程序运行前台服务并与服务器建立连接,并通过积极的ping(@ 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%
Run Code Online (Sandbox Code Playgroud)

测试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%
Run Code Online (Sandbox Code Playgroud)

假设:传入的网络数据包会自动唤醒CPU,因此无需唤醒锁定.使用AlarmManager ping(而不是计时器)意味着我们不需要唤醒锁.

取下那个唤醒锁似乎真的有助于电池.令人惊讶的是,对任何一种解决方案的激烈攻击并没有像我预期的那样影响电池寿命.(我们进行了许多其他测试,包括一个应用程序只是持有一个wifilock并且没有做任何导致同期电池损失约4%到5%的测试)

由于应用程序能够成功发送所有ping请求并接收所有传入消息,我相信我的假设是正确的.但我很乐意得到任何专家的确认.

还有一个问题: 如果应用程序要监听传入的连接.在这种情况下我需要拿一个唤醒锁,对吗?传入连接不会唤醒CPU?我们不是沿着这条路走下去,而是想确认一下.

此外,请不要推荐GCM,它已被公司政策排除.

谢谢.

sockets android tcp wakelock batterylevel

37
推荐指数
1
解决办法
8198
查看次数

标签 统计

android ×1

batterylevel ×1

sockets ×1

tcp ×1

wakelock ×1