Android 8.0 后臺(tái)位置限制

概覽

為降低功耗,無論應(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é)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,745評(píng)論 25 709
  • 三個(gè)標(biāo)簽:1.母嬰微商2.演說家3.家庭教育 三個(gè)目標(biāo):1.熟練掌握易效能系統(tǒng)2.制定一套系統(tǒng)的育兒課程3.制定一...
    蟲媽家庭幸福力閱讀 333評(píng)論 0 0
  • 開發(fā)中,通常使用第三方框架可以很快的實(shí)現(xiàn)通過字典轉(zhuǎn)模型,通過plist創(chuàng)建模型,將字典的鍵值對(duì)轉(zhuǎn)成模型屬性,將模型...
    蛐蛐_閱讀 927評(píng)論 0 4

友情鏈接更多精彩內(nèi)容