电池高效的定期数据提交
Posted
技术标签:
【中文标题】电池高效的定期数据提交【英文标题】:Battery efficient periodical data submission 【发布时间】:2012-10-31 12:31:13 【问题描述】:我有一个要在手机上运行的网络应用程序,当它打开时会持续生成数据(每几秒或每几分钟生成几千字节,具体取决于设置),并且需要将其实时推送到服务器。从来没有数据从服务器发送到浏览器。
我主要关心的是让这个提交省电,延迟几秒钟是完全可以的。
我设想了两种解决方案:
-
定期向服务器发送 POST 数据(以避免需要维护永久连接)
打开websocket并定期发送消息(以避免http请求的重量)
哪一个对电池最有效?我还缺少其他策略吗?
实际上,我的应用程序将托管在 heroku 上,但 does not supports websockets 会导致长时间轮询,因此目前我认为按需发布更好,但我想知道它是否可以作为一个选项未来(或者这个假设可能是错误的)。
【问题讨论】:
【参考方案1】:安卓
在 android 设备上,存在三种不同的网络无线电状态as the documentation says:
典型 3G 网络无线电的状态机由三个 能量状态:
全功率:在连接处于活动状态时使用,允许设备以尽可能高的速率传输数据。
低电量:一种中间状态,在充满状态下使用大约 50% 的电池电量。
待机:没有网络连接处于活动或不需要网络连接的最低能量状态。
虽然低电量和空闲状态消耗的电量显着减少,但它们 还会给网络请求带来显着的延迟。返回 从低状态全功率大约需要 1.5 秒,同时移动 从空闲到充满可能需要 2 秒以上。
设备在空闲 5 秒后从 Full 变为 Low,再过 12 秒后从 Low 变为 Standby。
上面的链接还介绍了一些电池友好型连接的最佳实践,尽管它没有具体说明 Websockets。
ios
我在 iOS 设备上找不到这样的特定文档,但型号 seems to apply in a similar way:
蜂窝和 Wi-Fi 无线电设计为在没有信号时关闭 活动。但是,根据收音机的不同,这样做可能需要几个 秒。如果您的应用每隔几秒就会传输少量数据, 无线电可能会保持通电并继续消耗功率,即使 当他们实际上没有做任何事情时。而不是传输小 数据量越多,传输量越大越好 数据一次或相对较大的间隔。
那又怎样?
一般来说,您可能应该使用较短的 POST 请求并尽可能少地发送数据,以便无线电可以在这期间关闭。
【讨论】:
使定期 POST 请求听起来更合乎逻辑,我还将添加一个缓冲设置以限制频率。关于 Android,我不清楚活动的 websocket 是否会阻止进入低功率/待机状态,因为它说“无线电空闲 XX 秒”,但未使用的套接字实际上不会发送数据包。我必须尝试使用 DDMS。 根据我使用 websockets 的经验,REST 服务(POST、GET、...)是一个套接字。根据文档,Android 设备会处理和“标记”连接以保持某种形式的连接,即使无线电变得空闲(“GCM 是使用持久 TCP/IP 连接实现的”)以上是关于电池高效的定期数据提交的主要内容,如果未能解决你的问题,请参考以下文章