高效的定期数据提交以延长电池寿命

5
我有一个Web应用程序,要在移动电话上运行,打开时会持续生成数据(每几秒或每几分钟根据设置生成几千字节),需要实时将其推送到服务器。从不向浏览器发送任何数据。
我的主要关注点是使此提交电池高效,几秒钟的延迟完全可以接受。
我设想了两种解决方案:
  1. 定期使用数据进行POST到服务器(避免保持永久连接)
  2. 具有打开的websocket并定期发送消息(避免http请求的权重)
哪个对电池最有效?还有其他我错过的策略吗?
实际上,我的应用程序将托管在heroku上,但该平台尚不支持websocket,结果是长轮询,因此目前我假设按需POST更好,但我想知道它是否可能成为未来的选项(或者可能这个假设是错误的)。
1个回答

2

Android

在Android设备上,根据文档描述,有三种不同的网络无线电状态:

典型3G网络无线电的状态机由三种能量状态组成:

  1. 全功率:在连接处于活动状态时使用,允许设备以最高可能的速率传输数据。

  2. 低功率:一种中间状态,使用完全状态下50%的电池电量。

  3. 待机:没有网络连接活动或需要时的最小能量状态。

虽然低和空闲状态消耗的电池电量显著降低,但它们也会为网络请求引入显着的延迟。从低状态返回到全功率状态需要约1.5秒,而从空闲状态移动到全功率状态可能需要超过2秒。

设备在空闲时间5秒后从全功率切换到低功率,然后在另外12秒后从低功率切换到待机。

上面的链接还涵盖了一些节省电池友好连接的最佳实践,尽管它没有针对Websockets提供任何具体信息。

iOS

我找不到关于iOS设备的这种具体文档,但是模型似乎以类似方式应用

当没有活动时,蜂窝和Wi-Fi无线电会自动关闭。不过,根据无线电的不同,这样做可能需要几秒钟的时间。如果您的应用程序每隔几秒钟传输一小段数据,即使在实际上没有执行任何操作时,无线电也可能保持通电状态并继续消耗电力。与更经常地传输少量数据相比,最好一次传输较大量的数据或间隔较大时间。

那么呢?

一般而言,您应该尽可能使用短的POST请求,并尽可能少地发送数据,以便在两者之间无线电可以关闭。


定期进行POST请求听起来更合理,我还会添加一个缓冲设置以限制频率。关于Android,我不确定活动的websocket是否会阻止进入低功耗/待机状态,因为它说“无线电XX秒空闲”,但未使用的套接字实际上不会发送数据包。我必须用DDMS试一下。 - Mathieu
根据我的WebSocket经验,REST服务(POST、GET等)就是一个Socket。根据文档,Android设备会处理和“标记”连接,即使无线电变得空闲也能保持一定的活跃状态(“GCM使用持久的TCP/IP连接实现”)。 - Goufalite

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