原生后台GPS位置限制,降低功耗
1.后台 GPS 位置限制的背景
为了控制功耗,Android 平台对后台应用获取位置信息的频率进行了限制。后台的定义与后台执行限制一致,即应用不在前台运行时被视为后台应用。
2.更新间隔限制:
后台应用获取位置信息的更新间隔不能超过一定阈值。该阈值从系统设置项 Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS 中读取,默认值为 30 分钟。位置信息的上报由底层统一处理,然后分发给应用。因此,不同应用的注册时间差不会影响上报频率。时间间隔会随着应用状态的变化动态调整。当应用在前台运行时,不受此限制。
3. 例外情况
以下应用不受后台位置限制:
1.系统应用:UID 为 1000 的系统应用。
2.白名单应用:
白名单来源一:保存在 Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST 中,以逗号分隔的包名。默认情况下,没有 UI 可以修改此设置项。
白名单来源二:通过 SystemConfig 读取 /system/etc/permissions/platform.xml 中的 allow-unthrottled-location 字段。默认情况下,该字段不存在。
3.查询者与位置提供者同包名:如果查询位置信息的应用与位置提供者是同一个应用,则不受限制。
4. 对普通应用的影响
由于后台位置上报频率的限制,普通应用可能会受到较大影响,具体表现为以下两种情况:
4.1 后台位置功能受限
场景:如果应用在后台使用位置服务,功能可能会受到影响。例如,百度地图在后台运行时,语音和位置提醒可能无法及时更新。
实测示例:
选择目的地 → 步行 → 跟我走。
如果百度地图在前台运行,语音和位置提醒及时。
如果通过 Home 键将百度地图退到后台,语音提醒基本不会随位置变化更新。
4.2 前台服务不受影响
如果应用具有前台服务(即在通知栏中可以看到服务的通知),则不受后台位置限制的影响。