后台位置信息使用会显著影响电池续航。Android 支持对后台位置信息收集进行限制,促使开发者优化其应用以提高电池效率。无论运行何种 Android 版本,这些优化措施都对所有设备有益。
借助后台位置信息限制
- 后台位置信息收集会受到限制,每小时仅计算和传送几次位置信息。
- Wi-Fi 扫描更加保守,并且当设备保持连接到同一静态接入点时,不会计算位置信息更新。
- 地理围栏响应速度从几十秒变为大约两分钟。此更改可提高电池性能,在某些设备上提升可达 10 倍。
所需知识
本文档假定您熟悉以下 API
- Google 位置信息服务。这些 API 比框架位置信息 API 具有更高的准确性,并且对电池的负担更小。
- Fused Location Provider。此 API 结合了来自 GPS、Wi-Fi 和蜂窝网络的信号,以及加速度计、陀螺仪、磁力计及其他传感器。
- 地理围栏,此 API 构建于 Fused Location Provider 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()
方法指定计算应用位置信息的间隔。 - 使用
setMinUpdateIntervalMillis()
方法指定接收其他应用位置信息的间隔。
使用 setIntervalMillis()
时,传入可能的最大值。后台位置信息收集尤其如此,因为这通常会消耗电池电量。将几秒钟的间隔留给前台用例。
Android 8.0(API 级别 26)中引入的后台位置信息限制强制执行这些策略,但您的应用应努力在运行 Android 7.0(API 级别 24)及更低版本的设备上强制执行这些策略。
延迟
您可以使用 setMaxUpdateDelayMillis()
方法指定延迟,通常传入一个值,该值比 setIntervalMillis()
方法中指定的间隔大几倍。此设置会延迟位置信息传送,并且多个位置信息更新可能会分批传送。这两项更改有助于最大限度地减少电池消耗。
如果您的应用不需要立即进行位置信息更新,应向 setMaxUpdateDelayMillis()
方法传入可能的最大值,这会有效地以延迟换取更多数据和电池效率。
使用地理围栏时,应用应向 setNotificationResponsiveness()
方法传入一个较大值,以节省电量。建议使用五分钟或更大的值。
延伸阅读
如需了解详情,请参阅以下文档