概覽
為降低功耗,無論應(yīng)用的目標(biāo) SDK 版本為何,Android 8.0 都會(huì)對(duì)后臺(tái)應(yīng)用檢索用戶當(dāng)前位置的頻率進(jìn)行限制。
如果您的應(yīng)用在后臺(tái)運(yùn)行時(shí)依賴實(shí)時(shí)提醒或運(yùn)動(dòng)檢測(cè),這一位置檢索行為就顯得特別重要,必須緊記。
重要說明:作為起點(diǎn),我們只允許后臺(tái)應(yīng)用每小時(shí)接收幾次位置更新。我們將在整個(gè)預(yù)覽版階段繼續(xù)根據(jù)系統(tǒng)影響和開發(fā)者的反饋優(yōu)化位置更新間隔。
系統(tǒng)會(huì)對(duì)前臺(tái)應(yīng)用和后臺(tái)應(yīng)用進(jìn)行區(qū)分。應(yīng)用滿足以下任一條件即視為前臺(tái)應(yīng)用:
- 它具有可見的 Activity,無論 Activity 處于啟動(dòng)還是暫停狀態(tài)。
- 它具有前臺(tái)服務(wù)。
- 另一個(gè)前臺(tái)應(yīng)用通過綁定到應(yīng)用的其中一個(gè)服務(wù)或使用應(yīng)用的其中一個(gè)內(nèi)容提供程序與應(yīng)用相連。
如果以上所有條件均不滿足,應(yīng)用即視為后臺(tái)應(yīng)用。
前臺(tái)應(yīng)用行為得到保留
如果應(yīng)用在運(yùn)行 Android 8.0 的設(shè)備上處于前臺(tái),其位置更新行為將與 Android 7.1.1(API 級(jí)別 25)及更低版本上相同。
警告:如果您的應(yīng)用長時(shí)間進(jìn)行近乎實(shí)時(shí)的位置更新檢索,將大幅度縮短設(shè)備的電池壽命。
優(yōu)化應(yīng)用的位置行為
考慮在您的應(yīng)用接收位置更新不頻繁的情況下其后臺(tái)運(yùn)行用例是否根本無法成功。如果屬于這種情況,您可以通過執(zhí)行下列操作之一提高位置更新的檢索頻率:
- 將您的應(yīng)用轉(zhuǎn)至前臺(tái)。
- 使用應(yīng)用中的某個(gè)前臺(tái)服務(wù)。激活此服務(wù)時(shí),您的應(yīng)用必須在通知區(qū)顯示一個(gè)持續(xù)性的通知。
- 使用 Geofencing API 的元素(例如 GeofencingApi 接口),這些元素針對(duì)最大限度減少耗電進(jìn)行了專門優(yōu)化。
- 使用被動(dòng)位置偵聽器,它可以在后臺(tái)應(yīng)用加快位置請(qǐng)求頻率時(shí)提高位置更新的接收頻率。
注:如果您的應(yīng)用需要訪問的位置歷史記錄包含時(shí)間頻繁更新,請(qǐng)使用批處理版本的 Fused Location Provider API 元素,例如 FusedLocationProviderApi 接口。當(dāng)您的應(yīng)用運(yùn)行于后臺(tái)時(shí),此 API 會(huì)以高于非批處理版本 API 的頻率接收用戶的位置。但切記,您的應(yīng)用批量接收更新的頻率仍僅為每小時(shí)幾次
受影響的 API
對(duì)后臺(tái)應(yīng)用位置檢索行為的更改影響下列 API:
Fused Location Provider (FLP)
- 如果您的應(yīng)用運(yùn)行在后臺(tái),位置系統(tǒng)服務(wù)只會(huì)根據(jù) Android 8.0 行為變更中定義的間隔,按每小時(shí)幾次的頻率為其計(jì)算新位置。即使您的應(yīng)用請(qǐng)求進(jìn)行更頻繁的位置更新,也仍是如此。
- 如果您的應(yīng)用運(yùn)行在前臺(tái),與 Android 7.1.1(API 級(jí)別 25)相比,在位置采樣率上不會(huì)有任何變化。
Geofencing
- 后臺(tái)應(yīng)用可以高于接收 Fused Location Provider 更新的頻率接收地理圍欄轉(zhuǎn)換事件。
- 地理圍欄事件的平均響應(yīng)時(shí)間是大約每兩分鐘一次。
GNSS Measurements 和 GNSS Navigation Messages
- 當(dāng)您的應(yīng)用位于后臺(tái)時(shí),注冊(cè)用于接收 GnssMeasurement 和 GnssNavigationMessage 輸出的回調(diào)會(huì)停止執(zhí)行。
Location Manager
- 提供給后臺(tái)應(yīng)用的位置更新只會(huì)根據(jù) Android 8.0 行為變更中定義的間隔,按每小時(shí)幾次的頻率提供。
注:如果運(yùn)行您的應(yīng)用的設(shè)備安裝了 Google Play 服務(wù),強(qiáng)烈建議您改用 Fused Location Provider (FLP)
WLAN 管理器
startScan() 方法對(duì)后臺(tái)應(yīng)用執(zhí)行完整掃描的頻率僅為每小時(shí)數(shù)次。如果不久之后后臺(tái)應(yīng)用再次調(diào)用此方法, WifiManager 類將提供上次掃描所緩存的結(jié)果。