使用http时的Android电池
作者:互联网
谷歌最近推出了推送到设备服务,但仅在2.2及更高版本中可用.
我的应用程序中需要一个类似的系统,并且我在努力克服限制.
问题是电池寿命.由于必须立即通知用户有关服务器上的更改的信息,因此我想实现一种可在后台运行的服务(标准Android服务)并向服务器查询更新.
当然,即使每秒查询一次服务器,也会占用大量带宽和电池,因此,我的问题是:如果服务器保持响应一段时间,会有所不同吗? (Comet类型ajax请求背后的想法)
像这样工作:
>设备发送数据更新请求
>服务器获取请求并进入循环一分钟,检查每次迭代是否有更新
>如果有更新,服务器将响应发送回更新
>否则,服务继续进行下一个迭代.
>一分钟后,它最终发送响应,提示尚无可用数据
>响应后(无论是空还是有数据),Android都会触发另一个此类请求.
它肯定会花费更少的带宽,但是会消耗更少(甚至更多)的电池吗?
解决方法:
如您建议的那样,持有一个TCP套接字(并因此等待HTTP响应)可能是您的最佳选择.您所描述的内容实际上已经通过HTTP连续请求实现.查看Bayeux protocol的HTTP推送通知.另外,请查看Android实现here.的价值,这绝对是我会用的.我没有做任何形式的分析,但是通过允许连接尽可能长时间地挂起,它可以使通过线路传输的数据量(与功耗成正比)最小化.
简而言之,Bayeux的工作方式与您建议的非常相似.客户端打开一个请求,服务器等待它.如果有要发送的东西,它将发送它,否则它只是等待.最终,请求将超时.此时,客户端发出另一个请求.您所获得的几乎是从服务器即时推送到客户端,而无需持续轮询和复制HTTP标头等信息.
标签:power-management,android 来源: https://codeday.me/bug/20191208/2094534.html