关于后台位置信息和电池续航

后台位置信息使用会显著影响电池续航。Android 支持对后台位置信息收集进行限制,促使开发者优化其应用以提高电池效率。无论运行何种 Android 版本,这些优化措施都对所有设备有益。

借助后台位置信息限制

  • 后台位置信息收集会受到限制,每小时仅计算和传送几次位置信息。
  • Wi-Fi 扫描更加保守,并且当设备保持连接到同一静态接入点时,不会计算位置信息更新。
  • 地理围栏响应速度从几十秒变为大约两分钟。此更改可提高电池性能,在某些设备上提升可达 10 倍。

所需知识

本文档假定您熟悉以下 API

了解电池消耗

位置信息收集和电池消耗的关系如下

  • 准确性: 位置信息数据的精确度。通常,准确性越高,电池消耗越大。
  • 频率: 计算位置信息的频率。计算位置信息的频率越高,使用的电池电量越多。
  • 延迟: 位置信息数据的传送速度。延迟越低,通常需要消耗更多电池电量。

准确性

您可以使用 setPriority() 方法指定位置信息准确性,并将以下值之一作为参数传入

  • PRIORITY_HIGH_ACCURACY 提供尽可能最高的准确性位置信息,其计算会根据需要使用尽可能多的输入信息(启用 GPS、Wi-Fi 和蜂窝网络,并使用多种传感器),并可能导致显著的电池消耗。
  • PRIORITY_BALANCED_POWER_ACCURACY 在优化电量的同时提供准确的位置信息。极少使用 GPS。通常结合使用 Wi-Fi 和蜂窝信息来计算设备位置信息。
  • PRIORITY_LOW_POWER 主要依靠蜂窝基站,避免使用 GPS 和 Wi-Fi 输入,以最大限度地减少电池消耗来提供粗略的(城市级)准确性位置信息。
  • PRIORITY_NO_POWER 被动接收其他应用已计算出的位置信息。

使用平衡电量或低电量选项来满足大多数应用的位置信息需求。将高准确性留给在前台运行且需要实时位置信息更新的应用(例如,地图应用)。

频率

您可以使用两种方法指定位置信息频率

使用 setIntervalMillis() 时,传入可能的最大值。后台位置信息收集尤其如此,因为这通常会消耗电池电量。将几秒钟的间隔留给前台用例。

Android 8.0(API 级别 26)中引入的后台位置信息限制强制执行这些策略,但您的应用应努力在运行 Android 7.0(API 级别 24)及更低版本的设备上强制执行这些策略。

延迟

您可以使用 setMaxUpdateDelayMillis() 方法指定延迟,通常传入一个值,该值比 setIntervalMillis() 方法中指定的间隔大几倍。此设置会延迟位置信息传送,并且多个位置信息更新可能会分批传送。这两项更改有助于最大限度地减少电池消耗。

如果您的应用不需要立即进行位置信息更新,应向 setMaxUpdateDelayMillis() 方法传入可能的最大值,这会有效地以延迟换取更多数据和电池效率。

使用地理围栏时,应用应向 setNotificationResponsiveness() 方法传入一个较大值,以节省电量。建议使用五分钟或更大的值。

延伸阅读

如需了解详情,请参阅以下文档

  • 建议:本指南列出了一些具体的建议操作,您可以使用这些操作来改善应用对电池续航的影响。
  • 用例:本指南提供了几种常见的使用位置信息服务的用例,以及如何针对这些用例优化对电池续航的影响。