使用 http 时的 Android 电池

Posted

技术标签:

【中文标题】使用 http 时的 Android 电池【英文标题】:Android battery when working with http 【发布时间】:2011-01-05 15:26:03 【问题描述】:

最近 google 推出了推送到设备服务,但它仅适用于 2.2 及更高版本。

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

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

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

像这样工作:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

感谢您的回复。我考虑过编写一个示例应用程序,并且我可能会在不久的将来这样做。关于请求。这只是一个简单的请求,例如someserver.com/getdata 然后设备等待响应,如果数据可用,则立即响应,或者在一段时间内(不到一分钟)得到响应,否则它只是等待,而主要的事情发生在服务器上。

以上是关于使用 http 时的 Android 电池的主要内容,如果未能解决你的问题,请参考以下文章

Android XMPP 电池寿命

Android常用系统广播

如何在android中使用系统电池状态更新通知

发送一批 http 请求时的天线使用情况

Android常用系统广播

Android常用系统广播