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

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

对于后台位置信息的限制:

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

必备知识

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

理解电池电量消耗

位置信息收集与耗电量之间的关系如下:

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

准确率

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

  • PRIORITY_HIGH_ACCURACY 会提供尽可能准确的位置,该位置是使用尽可能多的输入(它会启用 GPS、Wi-Fi 和移动网络,并使用各种传感器)计算出来的,可能会导致电池电量严重消耗。
  • PRIORITY_BALANCED_POWER_ACCURACY 可提供准确的位置信息,同时优化功耗。极少使用 GPS。通常结合使用 Wi-Fi 和小区信息来计算设备位置。
  • PRIORITY_LOW_POWER 主要依赖于手机基站,并避免使用 GPS 和 Wi-Fi 输入,从而以极低的电池消耗提供粗略(城市级)的精确度。
  • PRIORITY_PASSIVE 会被动接收其他应用已计算出的位置信息。

使用均衡功耗或低功耗选项可满足大多数应用的位置信息需求。请为在前台运行且需要实时位置信息更新的应用(例如地图应用)保留高精确度。

频率

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

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

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

延迟时间

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

如果您的应用不需要立即获取位置信息更新,您应向 setMaxUpdateDelayMillis() 方法传递尽可能大的值,从而有效地以延迟时间换取更多数据和电池效率。

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

深入阅读

有关详情,请参阅以下文档:

  • 建议:本指南列出了一些具体的推荐措施,您可以采取这些措施来改善应用对电池续航时间的影响。
  • 用例:本指南提供了您可能会使用位置信息服务的几个常见用例,以及如何针对这些用例优化对电池续航时间的影响。