安卓使用http时会影响电池寿命吗?

3

最近谷歌推出了Push-to-Device服务,但只适用于Android 2.2及以上版本。

我需要在我的应用程序中实现类似的系统,并试图绕过限制。

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

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

工作原理如下:

  • 设备发送数据更新请求
  • 服务器收到请求并进入循环,每次迭代都检查是否有更新
    • 如果有更新,则服务器发送带有更新的响应
    • 如果没有,则服务继续进行下一次迭代。
  • 一分钟后,它最终发送表明尚未有可用数据的响应
  • 响应后(无论是空的还是有数据的),Android都会再次发出这样的请求。

这肯定会减少带宽成本,但它会消耗更少的电池(甚至更多)吗?

2个回答

2
持有 TCP 套接字(并因此等待 HTTP 响应)就像你所建议的那样,可能是你最好的选择。你描述的实际上已经通过 HTTP continuation 请求实现了。请查看 Bayeux 协议 以获取 HTTP 推送通知。此外,查看 Android 实现 here. 就值得一提,这绝对是我会使用的方法。我没有对其进行任何分析,但这允许您通过尽可能长时间地保持连接来最小化在线传输的数据量(与电源消耗成正比)。简而言之,Bayeux 的工作方式非常类似于您建议的方式。客户端打开一个请求,服务器等待它。如果它有东西要发送,它就会发送,否则它只是等待。最终,请求将超时。此时,客户端会发出另一个请求。您获得的是几乎即时从服务器推送到客户端,而无需不断轮询和重复信息,如 HTTP 标头等。

1

当手机正在使用网络时,它的电池会更快地消耗。也就是说,当它发送请求和接收响应时,它会使用更多的电池。仅仅通过等待响应,它也会使用电池。然而,手机是否会下载数据来检查是否有响应?还是手机只是开放接收,服务器将响应推送到手机上?这主要取决于什么。如果手机只是开放接收响应,而在等待期间并没有实际使用网络来尝试下载一些响应,那么它应该使用更少的电池。

此外,手机每分钟发送一个查询而不是每秒钟发送一个查询肯定会使用更少的电池,就使用网络而言。但是,这取决于您如何使手机保持,如果您用非常复杂的逻辑来绑定它以使其等待,可能不会有助于电池寿命。然而,这可能不是问题,我想说,在所有情况下,这都会为您解决问题。

总之,这应该有助于电池寿命,但是您可以采取某些方式使其无法实现。写程序,然后更改某种类型的变量(例如WAIT_TIME从1分钟更改为1秒),并测试电池使用情况,这样做也不会有害吧?


谢谢您的回复。我考虑写一个示例应用程序,可能在不久的将来会实现它。 关于请求。 这只是一个简单的请求,例如http://someserver.com/getdata 之后,设备等待响应,如果数据可用,则立即或在一定时间内(不到一分钟)获得响应,否则它只是等待,而主要内容正在服务器上发生。 - Alex Orlov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接