后台位置信息和电池续航时间简介

后台位置信息用量可能会显著影响电池续航时间。Android 支持对后台位置信息收集进行限制,以促使用户优化应用,从而提高电池效率。这些优化对所有设备都有益,无论它们运行的是哪个 Android 版本。

启用后台位置信息限制后:

  • 限制收集后台位置信息,计算位置,并且每小时仅传递几次。
  • WLAN 扫描更加保守;当设备保持连接至同一静态接入点时,不会计算位置更新。
  • 地理围栏响应时间从数十秒更改为大约两分钟。这种更改可提升电池性能,在某些设备上最多可提升 10 倍。

所需知识

本文档假定您熟悉以下 API:

理解电池电量消耗

位置信息收集和电池电量消耗如下所示:

  • 准确度:位置数据的精度。一般而言,准确度越高,电池电量消耗越大。
  • 频率:位置的计算频率。位置的计算频率越高,电池电量消耗越大。
  • 延迟时间:位置数据的传递速度。延迟时间越短,通常电池电量消耗越大。

准确度

您可使用 setPriority() 方法指定位置信息的准确度,传递以下任意值作为参数:

  • PRIORITY_HIGH_ACCURACY 提供最准确的位置信息,计算过程使用尽可能多的输入(启用 GPS、WLAN 和蜂窝网络,并使用各种各样的传感器),会产生巨大的电池电量消耗。
  • PRIORITY_BALANCED_POWER_ACCURACY 提供准确的位置信息,同时进行了耗电优化。极少使用 GPS。通常结合使用 WLAN 和蜂窝网络信息来计算设备位置。
  • PRIORITY_LOW_POWER 主要依赖手机基站,避免 GPS 和 WLAN 输入,从而以最小的电池电量消耗提供粗略的(城市级)准确度。
  • PRIORITY_NO_POWER 被动地从已计算出位置的其他应用接收位置信息。

使用“平衡功耗”或“低功耗”选项可满足大多数应用的定位需求。仅针对在前台运行且要求实时位置信息更新的应用(例如地图应用)使用“高精确度”选项。

频率

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

使用 setIntervalMillis() 时,请传递最大值。在后台收集位置信息时尤其如此,因为在后台收集位置信息通常会导致电池电量消耗。为前台用例预留几秒钟的时间间隔。

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

延迟时间

您可使用 setMaxUpdateDelayMillis() 方法指定延迟时间,传递的值通常比 setIntervalMillis() 方法中指定的时间间隔大几倍。此设置会延迟位置信息的传递,而且多个位置信息更新可能分批传递。这两个变化有助于减少电池电量消耗。

如果您的应用无需即时位置更新,您应向 setMaxUpdateDelayMillis() 方法传递最大值,通过牺牲延迟时间有效获得更多数据和更高的电池效率。

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

深入阅读

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

  • 建议:本指南列出了一些具体建议措施,可帮助您降低应用对电池续航时间的影响。
  • 用例:本指南介绍了您可能会使用位置信息服务的几种常见用例,以及如何针对这些用例优化对电池续航时间的影响。