Android 8.0 開發者 FAQ
熱情的開發者們都想盡快吃上 "Android Oreo",黑白分明的 Oreo 就像二進位制程式碼一樣,深深吸引著技術達人們。
自從一個月前我們釋出了 Android Oreo 之後,收到了大量留言諮詢,關注這個重要新版本特性的朋友們留下了許多有代表性的問題。
為了儘快讓大家瞭解 Oreo 的特性,以及它與之前版本 Android 的區別,我們本月推出的《Android 開發者 FAQ》就為開發者們解答一些 “奧利奧” 的相關問題。
Q: 這些新特性是否提供向下相容,如果提供,相容到哪個版本?
A: 針對所有 API 級別的應用:
-
網路連線和 HTTP(S) 連線
-
集合的處理
-
記錄未捕獲的異常
-
輸入和導航
-
安全性
-
後臺執行限制
-
隱私性
針對 Android O 的應用:
-
內容變更通知
-
檢視焦點
-
許可權
-
集合的處理
-
媒體
-
類載入行為
Q: 關於 Android Oreo 有個問題想問一下:在該版本中,除了特定的系統隱式廣播接收器,在其他系統廣播接收器不能再以隱式進行註冊。那麼,自定義廣播是否可以註冊為隱式呢?
A: 自定義廣播是可以註冊為隱式的,如果應用註冊為接收廣播,則在每次傳送廣播時,應用的接收器都會消耗資源。 如果多個應用註冊為接收基於系統事件的廣播,這會引發問題;觸發廣播的系統事件會導致所有應用快速並連續消耗資源,從而降低使用者體驗。
Android 8.0 讓這些限制更為嚴格
-
針對 Android 8.0 的應用無法繼續在其清單中為隱式廣播註冊廣播接收器。 隱式廣播是一種不專門針對該應用的廣播。 例如,ACTION_PACKAGE_REPLACED 就是一種隱式廣播,因為它將傳送到註冊的所有偵聽器,讓後者知道裝置上的某些軟體包已被替換。
不過,ACTION_MY_PACKAGE_REPLACED 不是隱式廣播,因為不管已為該廣播註冊偵聽器的其他應用有多少,它都會只傳送到軟體包已被替換的應用。
-
應用可以繼續在它們的清單中註冊顯式廣播。
-
應用可以在執行時使用 Context.registerReceiver ( ) 為任意廣播(不管是隱式還是顯式)註冊接收器。
-
需要簽名許可權的廣播不受此限制所限,因為這些廣播只會傳送到使用相同證照籤名的應用,而不是傳送到裝置上的所有應用。
在許多情況下,之前註冊隱式廣播的應用使用 JobScheduler 作業可以獲得類似的功能。例如,一款社交照片應用可能需要不時地執行資料清理,並且傾向於在裝置連線到充電器時執行此操作。
之前,應用已經在清單中為 ACTION_POWER_CONNECTED 註冊了一個接收器;當應用接收到該廣播時,它會檢查清理是否必要。 為了遷移到 Android 8.0,應用將該接收器從其清單中移除。應用將清理作業安排在裝置處於空閒狀態和充電時執行。
Q: 如何設定我的 Android 8.0 Oreo 裝置進行移動列印?
A: 隨著 Android 8.0 Oreo 的釋出,您無需設定即可在 Android 裝置列印。現在已經內建移動列印。 您可以使用 Android 8.0 Oreo 裝置上的預設列印服務進行核心列印功能,無需安裝列印服務或下載移動列印應用程式
Q: Android Oreo 還有什麼其他有趣的東西?
A:
▲ 智慧文字選擇
在支援它的應用程式中,您可以在任何地方輕按地址,URL,電話號碼或電子郵件地址。Android 會識別文字的內容,並快速為您選擇整個字串,自己找出適當的開始和結束點,然後將為您提供一鍵選擇,選擇最合乎邏輯的位置(例如,帶有號碼的新電話或地址)。
▲ 更容易訪問的本地檔案管理器
Android Oreo 的檔案管理器有一些新的選擇,包括顯示您的完整的內部儲存的能力,並在應用程式內部開啟本機檔案管理器。它幾乎與第三方檔案管理器一樣強大,它允許基本的瀏覽和檔案操作 , 這對大多數人來說是足夠使用的。
▲ 更智慧的 Wi-Fi 切換
深深的沉浸在 Pixel 手機的網路設定選單中,是 Android Oreo 最美味的選擇之一:允許您的手機隨時隨地在已知的高質量網路範圍內自動開啟 Wi-Fi。而無需在第三方應用程式中進行復雜的配置來完成這種額外的選擇。(此功能目前僅適用於 Pixel 手機。)
Q: Android O 的外觀與我現在有什麼不同嗎?
A: Oreo 在 Android 美學方面並不是一個巨大的變化,但它確實引入了一些明顯的調整和細化到核心使用者介面。通知和快速設定皮膚可能是最明顯的示例。它現在是一個更輕的色調,具有更多的資訊和一些重新排列的元素。
通知本身也適用於 Oreo 的特定主題:例如,在 Google Play 音樂和 YouTube 的播放控制中,通知採用與當前播放的歌曲或視訊的藝術品相匹配的漂亮配色方案。
Q: Android O 對於多語言和國家有什麼新的調整嗎?
A: Android 7.0(API 級別 24)引入能指定預設類別語言區域的概念,但是某些 API 在本應使用預設 DISPLAY 類別語言區域時,仍然使用不帶引數的通用 Locale.getDefault ( ) 函式。
在 Android 8.0 中,以下函式使用 Locale.getDefault (Category.DISPLAY) 來代替 Locale.getDefault ( ):
-
Currency.getDisplayName ( )
-
Currency.getSymbol ( )
-
Locale.getDisplayScript ( )
當為 Locale 引數指定的 displayScript 值不可用時,Locale.getDisplayScript (Locale) 同樣回退到 Locale.getDefault ( )。
與語言區域和國際化有關的其他變更如下:
-
呼叫 Currency.getDisplayName(null) 會引發 NullPointerException。
-
時區名稱的分析方法發生變化。之前,Android 裝置使用在啟動時初始化的系統時鐘值快取用於分析日期時間的時區名稱。因此,如果在啟動時或其他較為罕見的情況下系統時鐘出錯,可能對分析產生負面影響。
-
現在,一般情況下,在分析時區名稱時分析邏輯將使用 ICU 和當前系統時鐘值。此項變更可提供更加準確的結果,如果您的應用使用 SimpleDateFormat 等類,此結果可能與之前的 Android 版本不同。
-
Android 8.0 將 ICU 的版本更新至版本 58
Q: 我最近在進行網頁開發,Android O 對 WebView 有沒有一些特別的修改?
A: Android 自動填充框架內建提供對自動填充功能的支援,對於安裝到執行 Android 8.0 的裝置上的應用,下列 WebView 物件相關的方法發生了變化:
WebSettings
-
getSaveFormData ( ) 函式現在返回 false。之前此函式返回為 true。
-
呼叫 setSaveFormData ( ) 不再有任何效果。
WebViewDatabase
-
呼叫 clearFormData ( ) 不再有任何效果。
-
hasFormData ( ) 函式現在返回 false。之前當表單包含資料時,此函式返回為 true。
Q: Android O 後臺的位置限制影響哪些 API?
A: 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 ( ) 方法對後臺應用執行完整掃描的頻率僅為每小時數次。如果不久之後後臺應用再次呼叫此方法, WifiManager 類將提供上次掃描所快取的結果。
Q: 這次 Android O 對聯絡人做了哪些改動?
A: 在之前版本的 Android 中,聯絡人提供程式元件允許開發者獲取每個聯絡人的使用情況資料。此使用情況資料揭示了與某個聯絡人相關聯的每個電子郵件地址和每個電話號碼的資訊,包括與該聯絡人聯絡的次數以及上次聯絡該聯絡人的時間。請求 READ_CONTACTS 許可權的應用可以讀取此資料。
如果應用請求 READ_CONTACTS 許可權,它們仍可以讀取此資料。從 Android 8.0 開始,使用情況資料查詢會返回近似值,而不是精確值。不過,Android 系統內部仍然會保留精確值,因此,此變更不會影響 auto-complete API。
此行為變更會影響以下查詢引數:
-
TIMES_CONTACTED
-
TIMES_USED
-
LAST_TIME_CONTACTED
-
LAST_TIME_USED
Q: 您好,我比較注重 Android O 的安全性,在賬號安全方面 Android O 做了哪些改進?
A: 除非身份驗證器擁有使用者帳號或使用者授予訪問許可權,否則,應用將無法再訪問使用者帳號。
僅擁有 GET_ACCOUNTS 許可權尚不足以訪問使用者帳號,要獲得帳號訪問許可權,應用應使用 AccountManager.newChooseAccountIntent ( ) 或特定於身份驗證器的函式。獲得帳號訪問許可權後,應用可以呼叫 AccountManager.getAccounts ( ) 來訪問帳號。
Android 8.0 已棄用 LOGIN_ACCOUNTS_CHANGED_ACTION。現在,應用在執行時,應使用 addOnAccountsUpdatedListener ( ) 獲取帳號更新資訊。
以上便是我們對收集到的一些關於 Android Oreo 的高頻問題及其解答,如果您有關於 Android 開發其他方面的問題,歡迎給我們留言,當某些領域的問題集中出現時,我們將集結整理成 FAQ 專欄文章,為開發者們答疑解惑。
推薦閱讀:
Instant App 常見問題官方指南
| Android 開發者 FAQ Vol.6
相關文章
- Android 8.0 Oreo 開發者常見問題 | Android 開發者 FAQ Vol.7Android
- Android 相容性 | Google Play 開發者 FAQ 特別版AndroidGo
- Android Oreo 常見問題 2.0 | Android 開發者 FAQ Vol.9Android
- Android Oreo 常見問題 3.0 | Android 開發者 FAQ Vol.11Android
- Android UI 及 API 優化指南|Android 開發者 FAQ Vol.10AndroidUIAPI優化
- Android Oreo 常見問題 2.0 | Android 開發者 FAQ Vol.9Android
- Android FAQAndroid
- 非 SDK 介面常見問題 | Android 開發者 FAQ Vol.13Android
- Kotlin 語言入門寶典 | Android 開發者 FAQ Vol.5KotlinAndroid
- Instant App 常見問題官方指南 | Android 開發者 FAQ Vol.6APPAndroid
- 四月刊 | Google Play 開發者 FAQGo
- 首發 | Google Play 開發者 FAQ 第一期Go
- 10 個開發者必知的 MySQL 8.0 新功能MySql
- Android 8.0 Oreo 現已推出!Android
- Android 8.0 原始碼分析 (八) ActivityManagerServiceAndroid原始碼
- Android 6.0、7.0、8.0、9.0適配Android
- Android 8.0 Oreo 畫中畫模式Android模式
- Android 8.0 自適應圖示Android
- android 8.0 Autofill Framework (自動填充框架)AndroidFramework框架
- Android 8.0 Oreo 推送通知的變化Android
- (連載)Android 8.0 : Android虛擬機器之JNIAndroid虛擬機
- Android P FAQ第一彈:非SDK管控特性Android
- Docker FAQDocker
- Oracle FaqOracle
- 聚焦 Android 11: Android 開發者工具Android
- Android 8.0 原始碼分析 (五) Service 啟動Android原始碼
- Android 8.0 原始碼分析 (四) Activity 啟動Android原始碼
- Android O 8.0 以上 bitmap記憶體分配Android記憶體
- (連載)Android 8.0 : 如何下載和閱讀Android原始碼Android原始碼
- Android 8.0 原始碼分析 (六) BroadcastReceiver 啟動Android原始碼AST
- Android 8.0 原始碼分析 (一) SystemServer 程式啟動Android原始碼Server
- 玩轉全新的 Android 8.0 Oreo 後臺策略Android
- Mac Android8.0原始碼編譯筆記MacAndroid原始碼編譯筆記
- Android原始碼閱讀-編譯8.0原始碼Android原始碼編譯
- Android依賴注入之BufferKnife 8.0註解使用Android依賴注入
- Volatility FAQ
- autoit《FAQ大全》
- Windows Phone FAQWindows