我已经阅读了网络上的一些文章和 StackOverFlow 上的一些问题,但似乎没有人有一个明确的答案:a)如果 google 对 Gmail、Mail 等使用 Long Lived TCP 连接,以及 b)如果在自定义应用程序中使用它会消耗电池寿命,如果是这样,大概会消耗多少?
3 回答
第一个问题的答案是,是的,Google 的 GTalkService 在安装了 Google 应用程序的 Android 手机上保持与 Google 服务器的持久 XMPP 连接。
至于你的第二个问题,答案比这里的一些评论让你相信的要复杂。特别是,额外连接的保活数据包——或任何小的但持续发生的数据传输——会影响 3G 无线电的电源管理状态周期,这将对电池寿命产生显着影响。
有关更多信息,请参阅这篇文章:
https://www.ericsson.com/research-blog/smartphone-traffic-impact-battery-networks/
如果可能,您可能会考虑使用新的 Cloud to Device Messaging API,它搭载在 GTalkService 之上,允许您的应用程序在不维护自己的 TCP 连接的情况下接收通知。不幸的是,缺点是 C2DM 不能在纯开源的 Android 上运行,它需要用户登录到他或她的 Google 帐户,并且只能在 Froyo 或更高版本上使用。
保持开放连接可以转化为更少的资源使用:小的“涓流”流量可以保持连接打开。
考虑相反的情况:客户端定期“轮询”服务器(假设与长期连接“涓流”相同的“刷新”率):每次打开新连接时都会产生更多流量。
连接设置/拆除是昂贵的(当然,在这个宇宙中一切都是相对的;-)。
保持开放连接的主要缺点:
- 客户端浏览器可能会限制每个窗口/选项卡的连接数等。
- 中间设备(例如 NAT、防火墙)不能经常重用端口来服务其他请求
- 您可以使用类似路由器或其他机器上的工具
tcpdump
来wireshark
确定 Google 的应用程序保持 TCP 连接打开的时间。您需要过滤您感兴趣的端口或地址。 - 如果您使用的是Android 1.6,确定电量消耗的最佳方法是使用新的电池使用情况指示器。只需安装您的自定义应用程序,然后查看监视器随着时间的推移会显示什么。