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 前臺服務不受影響
如果應用具有前臺服務(即在通知欄中可以看到服務的通知),則不受后臺位置限制的影響。