### **[后臺位置限制](https://developer.android.com/about/versions/oreo/background-location-limits.html)**
為降低功耗,無論應用的目標 SDK 版本為何,Android 8.0 都會對后臺應用檢索用戶當前位置的頻率進行限制。
如果您的應用在后臺運行時依賴實時提醒或運動檢測,這一位置檢索行為就顯得特別重要,必須緊記。
> 重要說明:作為起點,我們只允許后臺應用每小時接收幾次位置更新。我們將在整個預覽版階段繼續根據系統影響和開發者的反饋優化位置更新間隔。
系統會對前臺應用和后臺應用進行區分。應用滿足以下任一條件即視為前臺應用:
* 它具有可見的 Activity,無論 Activity 處于啟動還是暫停狀態。
* 它具有前臺服務。
* 另一個前臺應用通過綁定到應用的其中一個服務或使用應用的其中一個內容提供程序與應用相連。
如果以上所有條件均不滿足,應用即視為后臺應用。
#### **前臺應用行為得到保留**
如果應用在運行 Android 8.0 的設備上處于前臺,其位置更新行為將與 Android 7.1.1(API 級別 25)及更低版本上相同。
> 警告:如果您的應用長時間進行近乎實時的位置更新檢索,將大幅度縮短設備的電池壽命。
#### **優化應用的位置行為**
考慮在您的應用接收位置更新不頻繁的情況下其后臺運行用例是否根本無法成功。如果屬于這種情況,您可以通過執行下列操作之一提高位置更新的檢索頻率:
* 將您的應用轉至前臺。
* 使用應用中的某個前臺服務。激活此服務時,您的應用必須在通知區顯示一個持續性的通知。
* 使用 Geofencing API 的元素(例如 GeofencingApi 接口),這些元素針對最大限度減少耗電進行了專門優化。
* 使用被動位置偵聽器,它可以在后臺應用加快位置請求頻率時提高位置更新的接收頻率。
> 注:如果您的應用需要訪問的位置歷史記錄包含時間頻繁更新,請使用批處理版本的 Fused Location Provider API 元素,例如 FusedLocationProviderApi 接口。當您的應用運行于后臺時,此 API 會以高于非批處理版本 API 的頻率接收用戶的位置。但切記,您的應用批量接收更新的頻率仍僅為每小時幾次。
#### **受影響的 API**
對后臺應用位置檢索行為的更改影響下列 API:
**Fused Location Provider (FLP)**
* 如果您的應用運行在后臺,位置系統服務只會根據 Android 8.0 行為變更中定義的間隔,按每小時幾次的頻率為其計算新位置。即使您的應用請求進行更頻繁的位置更新,也仍是如此。
* 如果您的應用運行在前臺,與 Android 7.1.1(API 級別 25)相比,在位置采樣率上不會有任何變化。
**Geofencing**
* 后臺應用可以高于接收 Fused Location Provider 更新的頻率接收地理圍欄轉換事件。
* 地理圍欄事件的平均響應時間是大約每兩分鐘一次。
**GNSS Measurements 和 GNSS Navigation Messages**
* 當您的應用位于后臺時,注冊用于接收 GnssMeasurement 和 GnssNavigationMessage 輸出的回調會停止執行。
**Location Manager**
* 提供給后臺應用的位置更新只會根據 Android 8.0 行為變更中定義的間隔,按每小時幾次的頻率提供。
> 注:如果運行您的應用的設備安裝了 Google Play 服務,強烈建議您改用 Fused Location Provider (FLP)。
**WLAN 管理器**
[startScan() ](https://developer.android.com/reference/android/net/wifi/WifiManager.html#startScan())方法對后臺應用執行完整掃描的頻率僅為每小時數次。如果不久之后后臺應用再次調用此方法, WifiManager 類將提供上次掃描所緩存的結果。
- 前言
- Google官網對Android API各版本的介紹
- jelly Bean(果凍豆)Android 4.1、4.2、4.3
- Android 4.1
- Android 4.2
- Android 4.3
- KitKat(Android 4.4.*)巧克力
- Android 4.4 APIS
- Lollipop(棒棒糖)Android 5.*
- Android 5.0 APIs
- Android 5.0 Changes(變更)
- Android 5.1APIs
- Marshmallow(棉花糖)Android 6.0
- Android 6.0 APIs
- Android 6.0 Changes(變更)
- Android 6.0 Samples
- Android 6.0 Testing
- Nougat(牛扎塘)Android 7.*
- Android 7.0
- API
- 行為變更
- 示例
- Android 7.1
- 開發者API
- 示例Sample
- Oreo(奧利奧)8.*
- Android 8.0
- 功能和 API
- Android 8.0 行為變更
- 向 Android 8.0 遷移應用
- Android 8.0 示例
- Android 8.1
- 后臺執行限制
- 后臺位置限制
- API指南
- Android 簡介
- 應用基礎知識
- 設備兼容性
- 系統權限
- 請求權限
- 定義權限
- 平臺架構
- Java8 概覽
- 在ART上驗證應用行為
- 應用組件
- Intent 和 Intent 過濾器(Google官網介紹)
- 通用intent
- Activity
- 任務和返回棧(官網譯文)
- 概覽屏幕
- 活動簡介
- 活動生命周期
- 活動狀態更改
- 進程和應用程序生命周期
- 包裹和捆綁
- 最近的屏幕
- 片段
- 加載器
- 服務Service
- 綁定服務
- AIDL
- 內容提供程序
- 內容提供程序基礎知識
- 創建內容提供程序
- 日歷提供程序
- 聯系人提供程序
- 存儲訪問框架
- 使用存儲訪問框架打開文件
- 創建自定義文檔提供程序
- 應用小部件
- 應用小部件主機
- 進程和線程
- 應用資源
- 概覽
- 提供資源
- 訪問資源
- 處理運行時變更
- 本地化
- ICU4J Android框架API
- Android上的國際化
- 語言和語言區域
- 復雜的XML資源
- 資源類型
- 動畫
- 顏色狀態列表
- 可繪制對象
- 布局
- 菜單
- 字符串
- 樣式
- 其他類型
- 應用清單
- <action>
- <activity>
- <activity-alias>
- <application>
- <category>
- <compatiable-screens>
- <data>
- <grant-uri-permission>
- <intent-filter>
- <manifest>
- <meta-data>
- <path-permission>
- <permission>
- <permission-group>
- <permission-tree>
- <provider>
- <receiver>
- <service>
- <supporte-gl-texture>
- <supports-screens>
- <uses-configuration>
- <uses-feature>
- <uses-library>
- <uses-permission>
- <uses-permission-sdk-23>
- <uses-sdk>
- 用戶界面
- 界面概覽
- 界面布局
- 線性布局
- 相對布局
- 列表視圖
- 網格視圖
- 回收站視圖
- 外觀和感覺
- 可下載的字體
- XML中的字體
- 表情符號兼容性
- 自動調整TextView
- 樣式和主題-
- 輸入控件
- 按鈕
- 文本字段
- 復選框
- 單選按鈕
- 切換按鈕
- 微調框
- 選取器
- 輸入事件
- 菜單Menu
- 設置
- 對話框
- 通知
- Toast
- 自適應圖標
- 應用快捷方式
- 搜索
- 創建搜索界面
- 添加近期查詢建議
- 添加自定義建議
- 可搜索配置
- 多窗口支持
- 拖放
- 無障礙功能
- 為應用設置無障礙功能
- 無障礙功能開發者檢查單
- 構建無障礙服務
- 讓應用更容易訪問
- 使用節點樹調試
- 構建可訪問自定義視圖
- 樣式和主題
- 自定義組件
- 動畫和圖形
- 概覽介紹
- 屬性動畫
- 視圖動畫
- 可繪制動畫
- 畫布和可繪制對象
- 基于物理的動畫
- Spring Animation
- Fling Animation
- OpenGL ES
- 硬件加速
- 計算
- RenderScript
- 高級RenderScript
- Runtime API Reference(參考)
- Numerical Types(數字類型)
- Object Types(對象類型)
- Conversion Functions(轉換函數)
- Mathematical Constants and Functions(數學常量和函數)
- Vector Math Functions(矢量數學函數)
- Matrix Functions(矩陣函數)
- Quaternion Functions(四元數函數)
- Atomic Update Functions(原子更新函數)
- Time Functions and Types(時間函數和類型)
- Allocation Data Access Functions(分配數據訪問函數)
- Object Characteristics Functions(對象特性函數)
- Kernel Invocation Functions and Types(內核調用函數和類型)
- Input/Output Functions(輸入輸出函數)
- Debugging Functions(調試函數)
- Graphics Functions and Types(圖形函數和類型)
- Index(索引)
- Media Apps(媒體應用)
- Media Apps Overview(媒體應用程序概述)
- Working with a Media Session(使用媒體會話)
- Building an Audio App(建立一個音頻應用)
- Building a Media Browser Service(構建媒體瀏覽器服務)
- Building a Media Browser Client(構建媒體瀏覽器客戶端)
- Media Session Callbacks(媒體會話回調)
- Building a Video App(建立一個視頻應用)
- Building a Video Player Activity(建立一個視頻播放器Activity)
- Media Session Callbacks-(媒體會話回調)
- Responding to Media Buttons(響應媒體按鈕)
- Handling Changes in Audio Output(處理音頻輸出的變化)
- Managing Audio Focus(管理音頻焦點)
- The Google Assistant and Media Apps(Google智能助理和媒體應用)
- 媒體和相機
- Supported Media Formats(支持的媒體格式)
- MediaPlayer(媒體播放器)
- MediaRecorder
- ExoPlayer
- Controller Amplitude with VolumeShaper(VolumeShaper控制器振幅)
- Media Routing(媒體路由)
- MediaRouter API
- MediaRouteProvider API
- Camera API(相機API)
- 位置和傳感器
- Location and Maps(位置和地圖)
- Location Strategies(位置策略)
- Sensors Overview(傳感器概覽)
- Motion Sensors(運動傳感器)
- Position Sensors(位置傳感器)
- Environment Sensors(環境傳感器)
- Raw GNSS Measurements(原始的GNSS測量)
- 連接
- Bluetooth
- Bluetooth Low Energy(藍牙低功耗)
- NFC
- NFC Basics(NFC基礎知識)
- Advanced NFC(高級NFC)
- Host-based Card Emulation(基于主機的卡模擬)
- Telecom(電信)
- Self-Managed ConnectionServices(自我管理的連接服務)
- Wi-Fi P2P
- Wi-Fi Aware
- Companion Device Pairing
- USB
- Accessory(配件)
- Host(主機)
- SIP
- 文本和輸入
- Autofill Framework(自動填充框架)
- Test your app with autofill(使用自動填充測試你的應用)
- Building autofill services(構建自動填充服務)
- Copy and Paste(復制和粘貼)
- Creating an IME(創建IME)
- Image Keyboard(圖像鍵盤)
- Spelling Checker(拼寫檢查程序)
- 數據存儲
- Storage Options(存儲選項)
- Data Backup(數據備份)
- Account Transfer API(賬戶轉移API)
- Auto Backup(自動備份)
- Key/Value Backup(鍵值備份)
- Testing Backup and Restore(測試備份和還原)
- App Install Location(應用安裝位置)
- 庫
- 支持庫
- 功能
- 修訂歷史記錄
- 庫設置
- 數據綁定庫
- 測試支持庫
- 管理
- 設備策略
- 網絡應用
- Supporting Different Screens in Web Apps(在網絡應用中支持不同屏幕)
- Building Web Apps in WebView(在WebView中構建網絡應用)
- Managing WebViews
- Migrating to WebView in Android 4.4(遷移到Android4.4中的WebView)
- Debugging Web Apps(調試網絡應用)
- Best Practices for Web Apps(網絡應用最佳做法)
- 最佳實踐
- Supporting Multiple Screens(支持多種屏幕)
- Distributing to Specific Screens(分配到特定屏幕)
- Screen Compatibility Mode(屏幕兼容性模式)
- Designing for Seamlessness
- Supporting Tablets and Handsets
- 培訓