后台位置信息用量可能会显著影响电池续航时间。Android 支持对后台位置信息收集进行限制,以促使用户优化应用,从而提高电池效率。这些优化对所有设备都有益,无论它们运行的是哪个 Android 版本。
启用后台位置信息限制后:
- 限制收集后台位置信息,计算位置,并且每小时仅传递几次。
- WLAN 扫描更加保守;当设备保持连接至同一静态接入点时,不会计算位置更新。
- 地理围栏响应时间从数十秒更改为大约两分钟。这种更改可提升电池性能,在某些设备上最多可提升 10 倍。
所需知识
本文档假定您熟悉以下 API:
- Google 位置信息服务。相较于框架位置 API,这些 API 的准确度更高,电池负担也更小。
- 一体化位置信息提供程序。该 API 结合来自 GPS、WLAN、蜂窝网络以及加速度计、陀螺仪、磁力计和其他传感器的信号。
- Geofencing API:此 API 基于 Fused Location Provider API 构建,并针对电池性能进行了优化。
理解电池电量消耗
位置信息收集和电池电量消耗如下所示:
- 准确度:位置数据的精度。一般而言,准确度越高,电池电量消耗越大。
- 频率:位置的计算频率。位置的计算频率越高,电池电量消耗越大。
- 延迟时间:位置数据的传递速度。延迟时间越短,通常电池电量消耗越大。
准确度
您可使用 setPriority() 方法指定位置信息的准确度,传递以下任意值作为参数:
PRIORITY_HIGH_ACCURACY提供最准确的位置信息,计算过程使用尽可能多的输入(启用 GPS、WLAN 和蜂窝网络,并使用各种各样的传感器),会产生巨大的电池电量消耗。PRIORITY_BALANCED_POWER_ACCURACY提供准确的位置信息,同时进行了耗电优化。极少使用 GPS。通常结合使用 WLAN 和蜂窝网络信息来计算设备位置。PRIORITY_LOW_POWER主要依赖手机基站,避免 GPS 和 WLAN 输入,从而以最小的电池电量消耗提供粗略的(城市级)准确度。PRIORITY_NO_POWER被动地从已计算出位置的其他应用接收位置信息。
使用“平衡功耗”或“低功耗”选项可满足大多数应用的定位需求。仅针对在前台运行且要求实时位置信息更新的应用(例如地图应用)使用“高精确度”选项。
频率
您可以使用以下两种方法指定位置信息更新频率:
- 使用
setIntervalMillis()方法指定计算应用位置的时间间隔。 - 使用
setMinUpdateIntervalMillis()方法指定接收其他应用的位置信息的时间间隔。
使用 setIntervalMillis() 时,请传递最大值。在后台收集位置信息时尤其如此,因为在后台收集位置信息通常会导致电池电量消耗。为前台用例预留几秒钟的时间间隔。
Android 8.0(API 级别 26)引入的后台位置信息限制将强制执行这些策略,但您的应用也应努力在搭载 Android 7.0(API 级别 24)及更低版本的设备上执行它们。
延迟时间
您可使用 setMaxUpdateDelayMillis() 方法指定延迟时间,传递的值通常比 setIntervalMillis() 方法中指定的时间间隔大几倍。此设置会延迟位置信息的传递,而且多个位置信息更新可能分批传递。这两个变化有助于减少电池电量消耗。
如果您的应用无需即时位置更新,您应向 setMaxUpdateDelayMillis() 方法传递最大值,通过牺牲延迟时间有效获得更多数据和更高的电池效率。
当使用地理围栏时,应用应向 setNotificationResponsiveness() 方法传递一个较大值来节省耗电量。建议设置五分钟或更大的值。
深入阅读
如需了解详情,请参阅以下文档: