sha*_*drx 40 sockets android battery tcp polling
所以...我正在为Android制作应用程序.应用程序需要发送和接收实时聊天数据(需要是一个套接字),但它也需要发送命令(这不是客户端在发送内容时知道的).
我需要知道在节省用户电池方面什么是更好的解决方案.
a)每次发送命令时打开和关闭连接,如果打开聊天选项卡,则保持连接不变.
b)始终保持连接不变.
我已经浏览了一下互联网,但得到了不同的答案,有人说保持持久的连接对电池寿命有害,而另一些人则认为不是(例如:"你问是否打开TCP连接会耗尽电池电量- 生活?也许我在这里不过了,但打开连接不应该浪费电池寿命......如果你认为我会想知道你在哪里得到这些信息.这对我来说听起来很奇怪.")
或者,如果有另一种解决方案会更好.我不认为谷歌的C2DM在这种情况下也会非常有用.
基本上,更多的是耗尽电池:持久连接,或者打开和关闭连接,除非聊天标签打开?
谢谢!
Jer*_*ner 62
保持空闲TCP套接字连接打开(没有数据被发送或接收)将不会(或至少不应该)消耗更多的电池而不是关闭它.这是因为空闲TCP连接不使用带宽或CPU周期(*).
也就是说,保持TCP连接长时间打开可能不是移动设备的好选择,因为TCP连接与睡眠的计算机不能很好地交互.问题场景是:您的Android用户在您的应用运行时让他的Android设备进入休眠状态,然后远程用户的程序(或TCP连接另一端的任何内容)通过TCP流发送一些数据.远程用户的程序永远不会从Android设备获得任何ACK,因为当然Android设备处于睡眠状态,因此远程设备的TCP堆栈假定它发送的TCP数据包必定已丢失,并且它通过增加其超时时间来响应,减少其TCP窗口大小(也称为TCP-packets-number-of-in-flight-at-once),并重新发送TCP数据包.但Android设备仍处于睡眠状态,因此同样的事情再次发生.结果是,几分钟后,TCP连接的远程端已经放慢到即使Android设备被唤醒的程度,TCP连接可能太慢而无法使用 - 此时你的程序将需要关闭陷入困境的TCP连接并启动一个新的,所以为什么还要努力保持它开放?
因此,我的建议是选择(a),并规定您关闭TCP连接作为设备即将进入睡眠状态的一部分.
一个可能的警告是,如果Android具有保持TCP连接打开的功能,则导致WiFi或蜂窝网络硬件在其可能进入睡眠的情况下保持通电 - 如果是这种情况,那么Android设备将支付为天线供电的电池成本,否则将不必支付.我不知道任何这样的Android逻辑,但我只使用了一点Android,所以我可能只是无知.至少可能值得测试.
(*)从技术上讲,TCP确实在TCP连接打开时经常发送"keepalive"数据包,并确实使用了一些CPU周期和天线功率......但在Android上发送keepalive数据包的默认时间间隔为2小时所以我怀疑用于此的功率会很明显.
| 归档时间: |
|
| 查看次数: |
19994 次 |
| 最近记录: |