android - 减少通过智能手机 radio 下载内容的应用程序对电池的影响

标签 android mobile 3g

如果我正在构建一个智能手机应用程序,该应用程序会定期从服务器下载数据,并且还会间歇性地上传数据(分析、广告等),我可以做些什么来最大限度地减少这些传输对电池生命周期的影响?

使用 radio (2G、3G、LTE 等)进行传输对电池的影响尤为显着。 radio 的电源使用情况是否会影响我选择何时、什么以及如何传输数据,以尽量减少对电池生命周期的影响?

最佳答案

This answer is summarized from The Android Training class, Transferring Data Without Draining the Battery which explains how to minimize the battery life impact of downloads and network connections, particularly in relation to the wireless radio.

In particular Optimizing Downloads for Efficient Network Access explains the wireless radio state machine in some detail and goes on to explain how your app's connectivity model should interact with it to minimize the related battery drain.

radio 状态机

Reference

每次您创建新的网络连接时, radio 都会切换到全功率状态。这种转换通常需要大约 2 秒,因此为了最大限度地减少延迟, radio 会引入延迟以推迟向较低能量状态的转换。

传输完成后,典型的 3G radio 将保持全功率 5 秒钟,然后在低能量状态再等待 12 秒钟,然后进入待机状态。每次您建立连接时, radio 总共会消耗近 20 秒的电量。

这种方法会导致在现代智能手机操作系统上运行的应用程序效率低下,因为应用程序在前台(延迟很重要)和后台(应优先考虑电池生命周期)运行。

解决方案

将下载对电池的影响降到最低的关键是要认识到传输频率比下载大小的影响更大。实际上,预取和排队/bundle 传输特别有效。

知道每次启动连接时都可能导致对讲机耗电近 20 秒,因此 bundle 数据传输非常重要,这样您就可以有效地进行应在相似时间内发生的相移传输窗口,以便您在每个传输 session 期间传输尽可能多的数据,以最大限度地减少 session 数量。

同样,预取允许您通过单个连接以全容量在单个突发中下载给定时间段内可能需要的所有数据。通过预先加载传输,您可以减少下载数据所需的 radio 激活次数、延长电池生命周期、改善延迟、降低带宽并缩短下载时间。

但是,预取还会带来通过下载未使用的数据而增加电池消耗和带宽使用的风险。

预取的积极程度取决于正在下载的数据的大小以及被使用的可能性。一般来说,预取数据是一种很好的做法,这样您只需要每 2 到 5 分钟再启动一次下载,大约 1 到 5 兆字节。

重用现有网络连接通常比创建新网络连接更有效。重用连接还可以让网络更智能地对拥塞和相关的网络数据问题使用react。

关于android - 减少通过智能手机 radio 下载内容的应用程序对电池的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9950379/

相关文章:

networking - 为什么不能绕过3G网络NAT?

android - 哪些设备支持 unity?

android - 是否有任何新的 api 可以在 honeycomb 上正确显示通知?

android - 是否可以在 react-native 中支持更新的 android sdk 版本?

mobile - 移动网站的轻量级样板替代品

javascript - 使用钛一次又一次加载旧数据库

android - 直接实现监听器或在类上实现(性能)

java - 如何使用 Appium Java 在 Android 5.0 上自动化时间选择器

iphone - 使用 3G 连接时 ASIHTTPRequest 参数出现问题(使用 Wifi 时正常)

Android,Android 4.0 中的HttpPost 方法有问题吗?