使用无线装置传输数据可能是您的应用最需要的功能之一 是极大的耗电来源。为了最大限度地降低 但请务必了解 则会影响底层无线装置硬件。
本部分介绍了无线装置状态机,并解释了 应用的连接模型与之交互。然后介绍了 这样做有助于尽可能减少应用数据的影响 降低电池耗电量
无线装置状态机
用户设备上的无线装置内置省电功能 有助于最大限度地降低电池消耗。完全处于活动状态时, 无线装置十分耗电,但在无活动或待机状态下, 无线装置消耗的电量非常少
请务必注意一个重要因素,即收音机无法从待机状态立即切换到完全活跃状态。这说明有一个延迟期 “提升”收听电台这样,电池就会从较高能量状态过渡到 在不使用期间,缓慢降低能量状态来节省电量 尝试尽量缩短与“开机”相关的延迟时间收听电台
典型 3G 网络无线装置的状态机包含 3 种能量状态:
- 满功率:在连接处于活动状态时使用,允许设备 以尽可能高的速率传输数据
- 低功耗:一种中间状态,可将电池功耗降低 大约 50%
- 待机:最低功耗状态;处于此状态时,没有网络连接处于活动状态。
虽然低功率和待机状态消耗的电量明显减少, 显著延迟网络请求。从低功率状态返回满功率状态需要大约 1.5 秒,而从待机状态切换到满功率状态需要大约 2 秒。
为了最大限度地缩短延迟时间,状态机使用延迟来推迟转换 从而降低能耗状态图 1 使用的是 AT&T 的典型 3G 无线装置的时间设置。
图 1. 典型的 3G 无线装置状态机。
每个设备上的无线装置状态机,尤其是相关的转换 延迟时间(“尾时间”)和启动延迟时间,因无线装置而异 (3G、LTE、5G 等),并由 运行设备所用的运营商网络
本页介绍了典型的 3G 无线 (根据 AT&T 提供的数据)。不过,一般原则和 归纳出的最佳实践适用于所有无线装置实现。
这种方法对典型的移动网络浏览特别有效,因为它可以 可防止在用户浏览网页时出现意外的延迟。相对较低的 尾时间还可确保浏览会话结束后,无线装置可以 转换到低能量状态。
遗憾的是,这种方法可能导致现代智能手机上的应用效率低下 等操作系统,其中应用既可在前台运行, 延迟很重要)和后台(电池续航时间应该 优先级)。
应用会如何影响无线装置状态机
每次您创建新的网络连接时,无线装置都会转换为满功率状态。对于上述典型的 3G 无线电状态机, 它在传输期间将保持满功率状态,加上 接着是低电量 12 秒 状态。因此,对于典型的 3G 设备,每个数据传输会话都会导致无线装置消耗能量至少 18 秒。
在实践中,如果某个应用每分钟进行三次 1 秒的数据传输,就会导致无线装置在即将进入待机模式时重新切换回高功率状态,进而永久保持活动状态。
图 2. 一秒传输运行的相对无线装置功耗
每分钟三次。图表不包括运行之间“开机”延迟时间。
相比之下,如果同一款应用整合其数据传输,每分钟运行一次 3 秒的传输,则无线装置每分钟保持高功率状态的时间总共只有 20 秒。这样,无线装置每分钟有 40 秒时间处于待机状态,从而显著减少电池耗电量。
图 3. 三秒传输的相对无线装置功耗
每分钟运行一次。
优化技巧
现在,您已经了解了网络访问对电池续航时间的影响,下面我们 您可以采取一些措施来减少耗电量,同时 以提供快速流畅的用户体验。
软件包数据传输
如前所述,整合数据传输以减少传输数据的频率,是提高电池效率的最佳方式之一。
当然,如果您的应用需要立即接收或发送数据以响应用户操作,则不一定能做到这一点。您可以通过以下方法缓解此问题: 预测和预取数据。其他情况,例如 将日志或分析数据发送到服务器,以及其他由应用发起的非紧急数据 非常适合批量和捆绑。请参见优化 由应用发起 任务 有关调度后台网络传输的提示。
预先抓取数据
预取数据是减少独立 您的应用运行的数据传输会话。借助预提取,当用户 您在应用中执行操作时,应用会预测哪些数据最有可能 用于下一系列用户操作,并在单次
通过提前加载传输,您可以减少下载数据所需的无线装置激活次数。因此,您不仅可以延长电池续航时间, 还可以缩短延迟时间、降低所需带宽并减少下载次数 次。
预提取还可以最大限度地减少应用内消耗,从而改善用户体验 因等待下载完成后再执行操作而导致的延迟 或查看数据
下面是一个实际示例。
新闻阅读器
许多新闻应用会尝试仅在 已选定类别,只有在用户想要阅读完整报道时才进行阅读, 自动展开和显示缩略图
通过这种方法,无线电被迫使无线装置在大多数情况下都保持活动状态 的用户滚动浏览头条、更改类别和 阅读文章。不仅如此,在各能量状态之间持续切换还会导致在切换类别或阅读报道时出现严重的延迟。
更好的方法是在启动时预加载合理数量的数据,从第一组新闻标题和缩略图开始(确保启动时间短),然后继续预加载其余标题和缩略图,以及至少主标题列表中可用的每篇文章的文章文本。
另一种替代方案是预先抓取每个标题、缩略图、报道正文,甚至可能是完整的报道图片(通常是按照预定的时间表在后台进行)。这种方法可能会花费大量带宽和 电池寿命 下载从不使用的内容,因此应该实现 。
其他注意事项
虽然预提取数据有很多好处,但如果使用过于激进,预提取可能会因下载未使用的数据而产生过度耗电问题加剧和带宽使用量增加的风险。此外,还要确保预先抓取不会在应用等待预先抓取完成时导致应用启动出现延迟。实际上,这可能意味着 逐步处理数据,或按优先顺序启动连续传输 以便下载和处理应用启动所需的数据 。
预先抓取数据的积极程度取决于要下载的数据大小以及使用这些数据的可能性。作为粗略的指导,根据前面介绍的状态机,对于在当前用户会话中有 50% 的几率被使用的那些数据,您通常可以预提取大约 6 秒钟(大约 1-2 兆字节)的数据,然后,下载未使用的这些数据的潜在费用与不下载这些数据的潜在节省费用大致相当。
一般来说,最好预先抓取数据 需要每 2 到 5 分钟启动一次下载, 5 MB。
遵循这一原则,下载较大的文件(例如视频文件)时, 分块下载(每 2 到 5 分钟), 仅预取接下来几分钟内可能会观看的视频数据。
一种解决方案是仅在连接到 WNAL 时(并且可能仅在设备充电时)才安排完整下载。WorkManager API 正是支持此用例,可让您限制后台工作,直到设备满足开发者指定的条件(例如充电和连接到 Wi-Fi)为止。
在发出请求之前检查连接情况
搜索手机信号是移动设备上最耗电的操作之一。对于用户发起的请求,最佳实践是先使用 ConnectivityManager
检查连接,如监控连接状态和连接计量中所示。如果没有网络,该应用不会强制移动无线装置进行搜索,因此可以节省电量。然后,该请求可以与其他
在建立连接时发送的请求数量。
池连接
除了批处理和预加载之外,另一种有用的策略是将应用的网络连接池化。
重复使用现有网络连接通常比启动新的网络连接更高效。重用连接还允许该网络 更加智能地应对拥塞和相关网络数据问题。
HttpURLConnection
和大多数 HTTP 协议
OkHttp 等客户端启用
连接池化,而将同一连接重复用于
请求。
回顾及展望未来
在本节中,您了解了有关无线装置的许多知识和一些策略 您可以广泛应用,以提供快速、响应迅速的用户体验,同时 减少电池消耗
在下一部分中,我们将详细介绍大多数应用常见的三种不同类型的网络互动。您将了解每种类型的驱动因素,以及用于高效管理这些互动的现代技术和 API。