3

最近 google 推出了 push-to-device 服务,但它仅在 2.2 及更高版本中可用。

我需要在我的应用程序中使用类似的系统,并且我正在尝试绕过限制。

问题是电池寿命。由于必须立即通知用户有关服务器上的更改,我想实现一个将在后台运行的服务(标准 Android 服务)并查询服务器以获取更新。

当然,即使每秒查询一次服务器,也会消耗大量带宽和电池,所以我的问题是:如果服务器将响应保持一段时间,是否会有所不同?(彗星类型ajax请求背后的想法)

像这样工作:

  • 设备发送数据更新请求
  • 服务器获取请求并循环一分钟,检查每次迭代是否有更新
    • 如果有更新,服务器将响应发送回更新
    • 如果不是,则服务继续进行下一次迭代。
  • 一分钟后,它终于发送没有数据可用的响应
  • 响应后(无论是空的还是有数据的)Android 都会触发另一个这样的请求。

它肯定会花费更少的带宽,但它会消耗更少(甚至更多)的电池吗?

4

2 回答 2

2

按照您的建议持有 TCP 套接字(并因此等待 HTTP 响应)可能是您的最佳选择。您所描述的实际上已经通过 HTTP 延续请求实现。查看用于 HTTP 推送通知的Bayeux 协议。此外,请在此处查看 Android 实现 对于它的价值,这绝对是我会使用的。我没有对它进行任何类型的分析,但这允许您通过尽可能长时间地挂起连接来最大限度地减少通过线路传输的数据量(这与功耗成正比)。

简而言之,Bayeux 的工作方式与您所建议的非常相似。客户端打开一个请求,服务器等待它。如果它有东西要发送,它就会发送它,否则它只是等待。最终,请求将超时。此时,客户端发出另一个请求。您所获得的几乎是从服务器即时推送到客户端,而无需不断轮询和复制 HTTP 标头等信息。

于 2011-01-05T15:44:21.143 回答
1

当手机积极使用网络时,它的电池会消耗更多。也就是说它什么时候发送请求,什么时候收到响应。它也将仅通过收听响应来使用电池。但是,手机会下载数据,查看是否有响应吗?还是电话只是开放接收它,服务器会将响应推送到电话?这主要取决于它。如果手机只是打开接收响应但在整个等待期间尝试下载某些响应时实际上并没有使用网络,则它应该使用更少的电池。

此外,就使用网络而言,手机每分钟而不是每秒发送一次查询肯定会使用更少的电池。然而,这取决于你如何让手机保持,如果你用非常复杂的逻辑将它捆绑起来让它等待它可能无助于电池寿命。然而,情况可能并非如此,我会说这很可能对你有用。

最后,它应该对电池有帮助,但有一些方法可以让它不会。编写程序然后只更改某种类型的变量(例如 WAIT_TIME 到 1 秒而不是 1 分钟)并测试电池使用情况不会有什么坏处,不是吗?

于 2011-01-05T15:36:40.597 回答