使用后台位置信息功能可能会严重影响电池续航时间。Android 支持限制后台位置信息收集,从而促使开发者优化其应用,以提高电池效率。这些优化对所有设备都有益,无论设备运行的是哪个 Android 版本。
- 限制收集后台位置信息,计算位置,并且每小时仅传递几次。
- WLAN 扫描更加保守;当设备保持连接至同一静态接入点时,不会计算位置更新。
- 地理围栏响应时间从数十秒更改为大约两分钟。此项变更可提升电池性能,在某些设备上甚至可提升高达 10 倍。
必备知识
本文档假定您熟悉以下 API:
- Google 位置信息服务。与框架位置信息 API 相比,这些 API 具有更高的准确性,并且对电池造成的负担更轻。
- 一体化位置信息提供程序。此 API 结合了来自 GPS、Wi-Fi 和移动网络的信号,以及加速度计、陀螺仪、磁力计和其他传感器。
- Geofencing:此 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_PASSIVE会被动接收其他应用已计算出的位置信息。
使用均衡功耗或低功耗选项可满足大多数应用的位置信息需求。请为在前台运行且需要实时位置信息更新的应用(例如地图应用)保留高精确度。
频率
您可以使用以下两种方法指定位置信息更新频率:
- 使用
setIntervalMillis()方法指定计算应用位置信息的时间间隔。 - 使用
setMinUpdateIntervalMillis()方法指定接收其他应用的位置信息的时间间隔。
使用 setIntervalMillis() 时,请传递尽可能大的值。对于后台位置信息收集,尤其如此,因为这通常会消耗电池电量。为前台用例预留几秒钟的间隔时间。
Android 8.0(API 级别 26)中引入的后台位置信息限制会强制执行这些策略,但您的应用应努力在搭载 Android 7.0(API 级别 24)及更低版本的设备上强制执行这些策略。
延迟时间
您可以使用 setMaxUpdateDelayMillis() 方法指定延迟时间,通常传递的值是 setIntervalMillis() 方法中指定的时间间隔的数倍。此设置将延迟位置信息的传递,而且多个位置信息更新可能分批传递。这两个变化有助于减少电池电量消耗。
如果您的应用不需要立即获取位置信息更新,您应向 setMaxUpdateDelayMillis() 方法传递尽可能大的值,从而有效地以延迟时间换取更多数据和电池效率。
使用地理围栏时,应用应向 setNotificationResponsiveness() 方法传递一个较大的值,以节省电量。建议设置为 5 分钟或更长时间。
深入阅读
有关详情,请参阅以下文档: