Android 8.0 爲用戶和開發者引入多種新功能。本文重點介紹面向開發者的新功能。html
在 Android 8.0 中,咱們已從新設計通知,以便爲管理通知行爲和設置提供更輕鬆和更統一的方式。這些變動包括:java
賬號建立、登陸和信用卡交易須要時間而且容易出錯。在使用要求執行此類重複性任務的應用時,用戶很容易遭受挫折。android
Android 8.0 經過引入自動填充框架,簡化了登陸和信用卡表單之類表單的填寫工做。在用戶選擇接受自動填充以後,新老應用均可使用自動填充框架。web
您能夠採起某些措施,優化您的應用使用此框架的方式。如需瞭解詳細信息,請參閱自動填充框架概覽。shell
Android 8.0 容許以畫中畫 (PIP) 模式啓動操做組件。PIP 是一種特殊的多窗口模式,最經常使用於視頻播放。目前,PIP 模式可用於 Android TV,而 Android 8.0 則讓該功能可進一步用於其餘 Android 設備。數據庫
當某個 Activity 處於 PIP 模式時,它會處於暫停狀態,但仍應繼續顯示內容。所以,您應確保您的應用在 onPause() 處理程序中進行處理時不會暫停播放。相反,您應在 onStop() 中暫停播放視頻,並在 onStart() 中繼續播放。如需瞭解詳細信息,請參閱多窗口生命週期。編程
要指定您的 Activity 可使用 PIP 模式,請在清單中將 android:supportsPictureInPicture 設置爲 true。(從 Android 8.0 開始,若是您打算在 Android TV 或其餘 Android 設備上支持 PIP 模式,則無需將 android:resizeableActivity 設置爲 true;只有在您的 Activity 支持其餘多窗口模式時,才須要設置 android:resizeableActivity。)api
Android 8.0 引入一種新的對象 PictureInPictureParams,您能夠將該對象傳遞給 PIP 函數來指定某個 Activity 在其處於 PIP 模式時的行爲。此對象還指定了各類屬性,例如操做組件的首選縱橫比。數組
如今,在添加畫中畫中介紹的現有 PIP 函數可用於全部 Android 設備,而不只限於 Android TV。此外,Android 8.0 還提供如下函數來支持 PIP 模式:緩存
Android 8.0 和 Android 支持庫 26 容許您從提供程序應用請求字體,而無需將字體綁定到 APK 中或讓 APK 下載字體。此功能可減少 APK 大小,提升應用安裝成功率,使多個應用能夠共享同一種字體。
如需瞭解有關下載字體的詳細信息,請參閱 可下載字體。
Android 8.0 推出一項新功能,即 XML 中的字體,容許您使用字體做爲資源。這意味着,再也不須要以資產的形式捆綁字體。字體在 R 文件中編譯,而且做爲一種資源,可自動用於系統。而後,您能夠利用一種新的資源類型 font 來訪問這些字體。
在運行 API 版本 14 及更高版本的設備中,支持庫 26 對此功能提供徹底支持。
Android 8.0 容許您根據 TextView 的大小自動設置文本展開或收縮的大小。這意味着,在不一樣屏幕上優化文本大小或者優化包含動態內容的文本大小比以往簡單多了。如需瞭解有關如何在 Android 8.0 中自動調整 TextView 的大小的詳細信息,請參閱自動調整 TextView 的大小。
Android 8.0 引入自適應啓動器圖標。自適應圖標支持視覺效果,可在不一樣設備型號上顯示爲各類不一樣的形狀。要了解如何建立自適應圖標,請參閱自適應圖標預覽功能指南。
圖像應用的 Android 開發者如今能夠利用支持廣色域彩色顯示的新設備。要顯示廣色域圖像,應用須要在其清單(每一個操做組件)中啓用一個標誌,並加載具備嵌入的廣域彩色配置文件(AdobeRGB、Pro Photo RGB、DCI-P3 等)的位圖。
Android 8.0 提供多種 API,幫助您管理在應用中顯示網頁內容的 WebView 對象。這些 API 可加強應用的穩定性和安全性,它們包括:
Android 8.0 引入了快捷方式和微件的應用內固定功能。在您的應用中,您能夠根據用戶權限爲支持的啓動器建立固定的快捷方式和小部件。
如需瞭解詳細信息,請參閱固定快捷方式和微件預覽功能指南。
以 Android 7.1(API 級別 25)或更低版本爲目標平臺的應用默認的最大屏幕縱橫比爲 1.86。針對 Android 8.0 或更高版本的應用沒有默認的最大縱橫比。若是您的應用須要設置最大縱橫比,請使用定義您的操做組件的清單文件中的 maxAspectRatio 屬性。
從 Android 8.0 開始,此平臺爲多顯示器提供加強的支持。若是 Activity 支持多窗口模式,而且在具備多顯示器的設備上運行,則用戶能夠將 Activity 從一個顯示器移動到另外一個顯示器。當應用啓動 Activity 時,此應用可指定 Activity 應在哪一個顯示器上運行。
注:若是 Activity 支持多窗口模式,則 Android 8.0 將爲該 Activity 自動啓用多顯示器支持。您應測試您的應用, 確保它在多顯示器環境下可正常運行。
每次只有一個 Activity 能夠處於繼續狀態,即便此應用具備多個顯示器。具備焦點的 Activity 將處於繼續狀態,全部其餘可見的 Activity 均暫停,但不會中止。如需瞭解有關當多個 Activity 可見時活動生命週期的詳細信息,請參閱多窗口生命週期。
當用戶將 Activity 從一個顯示器移動到另外一個顯示器時,系統將調整 Activity 大小,並根據須要發起運行時變動。您的 Activity 能夠自行處理配置變動,或容許系統銷燬包含該 Activity 的進程,並以新的尺寸從新建立它。如需瞭解詳細信息,請參閱處理配置變動。
ActivityOptions 提供兩個新函數以支持多個顯示器:
對 adb shell 進行了擴展,以支持多個顯示器。shell start 命令如今可用於啓動操做組件,並指定操做組件的目標顯示器:
adb shell start <activity_name> --display <display_id>
Android 8.0 讓您能夠更輕鬆地指定 View 元素的對邊使用相同外邊距和內邊距的情形。具體來講,您如今能夠在佈局 XML 文件中使用如下屬性:
注:若是您自定義應用邏輯以支持不一樣語言和文化(包括文本方向), 請記住,這些屬性不會影響 layout_marginStart、layout_marginEnd、paddingStart 或 paddingEnd 的值。您能夠自行設置這些值和新的垂直與水平佈局屬性 來建立取決於文本方向的佈局行爲。
某些應用(例如遊戲、遠程桌面和虛擬化客戶端)將大大受益於鼠標指針控制。指針捕獲是 Android 8.0 中的一項新功能,能夠經過將全部鼠標事件傳遞到您的應用中焦點視圖的方式提供此類控制。
從 Android 8.0 開始,您的應用中的 View 能夠請求指針捕獲並定義一個偵聽器來處理捕獲的指針事件。鼠標指針在此模式下將隱藏。若是再也不須要鼠標信息,該視圖能夠釋放指針捕獲。系統也能夠在視圖丟失焦點時(例如,當用戶打開另外一個應用時)釋放指針捕獲。
在適當的狀況下,Android 8.0 容許每一個應用聲明其所屬的類別。這些類別用於將應用呈現給用戶的用途或功能相似的應用歸類在一塊兒,例如按流量消耗、電池消耗和存儲消耗將應用歸類。您能夠在
Android 8.0 添加了一種之內容爲中心的全新 Android TV 主屏幕體驗,支持 Android TV 模擬器和 Nexus Player Android 8.0 設備映像。新的主屏幕在對應於頻道的行中組織視頻內容,這些頻道在系統上經過應用填充各個節目。應用能夠發佈多個頻道,用戶能夠配置他們但願在主屏幕上看到哪些頻道。Android TV 也包含一個 Watch Next 行,此行根據用戶的觀看習慣從應用填充節目。應用也能夠提供視頻預覽,這些預覽會在用戶聚焦到節目時自動播放。用於填充頻道和節目的 API 屬於 TvProvider API,這些 API 以 Android 支持庫模塊的形式隨 Android 8.0 分發。
從 Android 8.0 開始,AnimatorSet API 如今支持尋道和倒播功能。尋道功能容許您將動畫的位置設置爲指定的時間點處。若是您的應用包含可撤消的操做的動畫,倒播功能會頗有用。如今,您沒必要定義兩組獨立的動畫,而只需反向播放同一組動畫。
若是您的應用中,某個操做組件使用一種複雜的視圖層次結構(如圖 2 所示),可考慮將多組界面元素組成一個鍵區,簡化鍵盤導航這些元素的操做。用戶能夠在 Chromebook 設備上按 Meta+Tab 或 Search+Tab,在不一樣鍵區之間導航。鍵區的一些範例包括:側面板、導航欄、主內容區域和可能包含多個子元素的元素。
以一個包含五個導航鍵區的操做組件爲例,用戶可使用鍵盤導航鍵區快捷鍵進行導航。鍵區按如下佈局顯示:頂部面板、左側面板、主內容區域、底部面板和浮動操做按鈕。
要將一個 View 或 ViewGroup 元素設置爲一個鍵區,請在元素的佈局 XML 文件中將 android:keyboardNavigationCluster 屬性設置爲 true,或者將 true 傳遞至應用界面邏輯中的 setKeyboardNavigationCluster()。
注:鍵區不能嵌套,不過,非嵌套鍵區能夠顯示在層次結構的不一樣層級。 若是您嘗試嵌套鍵區,框架僅會將最頂層的 ViewGroup 元素視爲鍵區。
在具備觸摸屏的設備中,您能夠將某個鍵區指定的 ViewGroup 對象的 android:touchscreenBlocksFocus 元素設置爲 true,僅容許從鍵區導航進入和離開此鍵區。若是您將此配置應用於某個鍵區,用戶將沒法使用 Tab 鍵或箭頭鍵導航進入或離開此鍵區,而是必須按鍵區導航鍵盤組合鍵。
在 Android 8.0 中,您能夠指定在(從新)建立的操做組件繼續運行而且用戶按下鍵盤導航鍵(例如 Tab 鍵)以後應接收焦點的 View。要應用「設爲默認焦點」設置,請在包含界面元素的佈局 XML 文件中將 View 元素的 android:focusedByDefault 屬性設置爲 true,或者將 true 傳遞至應用界面邏輯中的 setFocusedByDefault()。
Android 8.0 添加了三個新的 StrictMode 檢測程序,幫助識別應用可能出現的錯誤:
Android 8.0 優化了緩存數據的導航和行爲。如今,每一個應用均得到必定的磁盤空間配額,用於存儲 getCacheQuotaBytes(UUID) 返回的緩存數據。
當系統須要釋放磁盤空間時,將開始從超過配額最多的應用中刪除緩存文件。所以,若是將您的緩存數據量始終保持低於配額的水平,則在必須清除系統中的某些文件時,您的緩存文件將能堅持到最後。系統在決定刪除您的應用中的哪些緩存文件時,將首先考慮刪除最舊的文件(由修改時間肯定)。
您還能夠針對每一個目錄啓用兩種新行爲,以控制系統如何釋放緩存數據:
最後,在須要爲大文件分配磁盤空間時,可考慮使用新的 allocateBytes(FileDescriptor, long) API,它將自動清除屬於其餘應用的緩存文件(根據須要),以知足您的請求。在肯定設備是否有足夠的磁盤空間保存您的新數據時,請調用 getAllocatableBytes(UUID) 而不要使用 getUsableSpace(),由於前者會考慮系統要爲您清除的任何緩存數據。
咱們已更新內容提供程序以支持加載大型數據集,每次加載一頁。例如,一個具備大量圖像的照片應用可查詢要在頁面中顯示的數據的子集。內容提供程序返回的每一個結果頁面由一個 Cursor 對象表示。客戶端和提供程序必須實現分頁才能利用此功能。
如今,ContentProvider 和 ContentResolver 類均包含 refresh() 函數,這樣,客戶端能夠更輕鬆地知道所請求的信息是否爲最新信息。
您能夠擴展 ContentProvider 以添加自定義的內容刷新邏輯。請務必重寫 refresh() 函數,以返回 true,告知提供程序的客戶端您已嘗試自行刷新數據。
您的客戶端應用可經過調用另外一個函數(又稱 refresh()),顯式請求已刷新的內容。在調用此函數時,傳入待刷新數據的 URI。
注:因爲您可能經過網絡不斷請求數據, 您應僅在有明顯跡象代表內容確已過期時才從客戶端調用 refresh()。 執行此類內容刷新最多見的緣由是響應滑動刷新手勢, 該手勢顯式請求當前界面顯示最新內容。
Android 8.0 引入了對 JobScheduler 的多項改進。因爲您一般可使用計劃做業替代如今受限的後臺服務或隱式廣播接收器,這些改進可讓您的應用更輕鬆地符合新的後臺執行限制。
JobScheduler 的更新包括:
Android 8.0 容許您爲首選項提供自定義數據存儲,若是您的應用將首選項存儲在雲或本地數據庫中,或者若是首選項特定於某個設備,此功能會很是有用。如需瞭解有關實現數據存儲的詳細信息,請參閱自定義數據存儲。
如今,findViewById() 函數的所有實例均返回
有一個新的 VolumeShaper 類。您能夠用它來執行簡短的自動音量轉換,例如淡入、淡出和交叉淡入淡出。
音頻應用經過請求和捨棄音頻焦點的方式在設備上共享音頻輸出。應用經過啓動或中止播放或者閃避音量的方式處理處於聚焦狀態的變動。有一個新的 AudioFocusRequest 類。對於此類,應用在處理音頻焦點變化時會使用新功能:自動閃避和延遲聚焦。
新的 getMetrics() 函數將返回一個包含配置和性能信息的 PersistableBundle 對象,用一個包含屬性和值的地圖表示。爲如下媒體類定義 getMetrics() 函數:
爲每一個實例單獨收集指標,並持續到實例的生命週期結束爲止。若是沒有可用的指標,則此函數將返回 null。返回的實際指標取決於類。
Android 8.0 爲 MediaPlayer 類添加了多種新函數。這些函數能夠從多個方面加強您的應用處理媒體播放的能力:
MediaPlayer 如今支持採樣級加密。
元數據能夠用於離線處理。例如,傳感器的陀螺儀信號能夠用於執行視頻穩定操做。
在添加元數據曲目時,曲目的 MIME 格式必須之前綴「application/」開頭。除了數據不是來源於 MediaCodec 之外,寫入元數據的操做與寫入視頻/音頻數據相同。相反,應用將包含相關時間戳的 ByteBuffer 傳遞給 writeSampleData() 函數。時間戳必須和視頻及音頻曲目處於相同的時基。
生成的 MP4 文件使用 ISOBMFF 的 12.3.3.2 部分定義的 TextMetaDataSampleEntry,指示元數據的 MIME 格式。在使用 MediaExtractor 提取包含元數據曲目的文件時,元數據的 MIME 格式將提取到 MediaFormat 中。
Android 8.0 容許您查詢和請求設備產生聲音的方式。對音頻播放的如下控制將讓您的服務更輕鬆地僅在有利的設備條件下產生聲音。
AudioAttributes 類包含一種新的聲音類型,即 USAGE_ASSISTANT,對應於 Google 智能助理在設備上的回答。
若是您但願本身的服務僅在特定的設備音頻配置處於活動狀態時開始產生聲音,您可使用 AudioManager 類註冊一個 AudioManager.AudioPlaybackCallback 實例,後者的onPlaybackConfigChanged() 函數能夠幫助您肯定當前活動的音頻屬性集。
您的服務可使用 requestAudioFocus() 函數提交一個更精細的設備級音頻焦點接收請求。傳入一個 AudioFocusRequest 對象,您可使用 AudioFocusRequest.Builder 建立這個對象。在這個構建類中,您能夠指定如下選項:
注:構建您的 AudioFocusRequest 實例時,若是您經過調用 setAcceptsDelayedFocusGain() 指示您的服務能夠等待產生聲音,您也必須調用 setOnAudioFocusChangeListener(),以便您的服務瞭解它什麼時候能夠開始產生聲音。
存儲訪問框架 (SAF) 容許應用顯示自定義 DocumentsProvider,後者能夠爲其餘應用提供訪問數據源中的文件的權限。事實上,文檔提供程序甚至能夠提供駐留在網絡存儲區或使用媒體傳輸協議 (MTP) 等協議的文件的訪問權限。
可是,訪問遠程數據源中的大媒體文件面臨一些挑戰:
Android 8.0 經過改進存儲訪問框架解決了各個挑戰。
從 Android 8.0 開始,存儲訪問框架容許自定義文檔提供程序爲駐留在遠程數據源中的文件建立可尋址的文件描述符。SAF 可打開文件,獲取原生可尋址的文件描述符。而後 SAF 向文檔提供程序提交離散字節請求。此功能使文檔提供程序能夠返回媒體播放器應用請求的準確字節範圍,而沒必要事先緩存整個文件。
要使用此功能,您須要調用新的 StorageManager.openProxyFileDescriptor() 函數。openProxyFileDescriptor() 函數可接受 ProxyFileDescriptorCallback 對象做爲回調。任什麼時候候,當客戶端應用對文檔提供程序返回的文件描述符執行文件操做時,SAF 都會調用回調。
從 Android 8.0 開始,您可使用 getDocumentUri() 函數得到與給定 mediaUri 引用相同文檔的 URI。不過,因爲返回的 URI 由 DocumentsProvider 提供支持,媒體集合管理器能夠直接訪問文檔,不用遍歷做用域目錄樹。所以,媒體管理器可以以明顯加快的速度對文檔執行文件操做。
注意:getDocumentUri() 函數僅能夠定位媒體文件;沒法授予應用訪問這些文件的權限。要詳細瞭解如何獲取媒體文件的訪問權限,請參閱參考文檔。
在 Android 8.0 中使用存儲訪問框架時,您能夠根據文檔的 ID,使用 findDocumentPath() 函數(存在於 DocumentsContract 和 DocumentsProvider 類中)從文件系統的根目錄中肯定路徑。該函數將在 DocumentsContract.Path 對象中返回此路徑。若是文件系統對相同文檔有多個定義的路徑,該函數將返回訪問具備給定 ID 的文檔時最常使用的路徑。
此功能在下列狀況下特別有用:
注:若是您的應用僅具備路徑中某些文檔的訪問權限,那麼 findDocumentPath() 的返回值將僅包含您的應用能夠訪問的文件夾和文檔。
Android 8.0 新增了對 WLAN 感知的支持,此技術基於周邊感知聯網 (NAN) 規範。在具備相應 WLAN 感知硬件的設備上,應用和附近設備能夠經過 WLAN 進行搜索和通訊,無需依賴互聯網接入點。咱們正在與硬件合做夥伴合做,以儘快將 WLAN 感知技術應用於設備。要了解有關如何將 WLAN 感知集成到您的應用中的信息,請參閱 WLAN 感知。
Android 8.0 經過增長如下功能,加強了平臺對藍牙的支持:
在嘗試經過藍牙、BLE 和 WLAN 與配套設備配對時,Android 8.0 提供的 API 容許您自定義配對請求對話框。如需瞭解詳細信息,請參閱配套設備配對。
如需瞭解有關在 Android 上使用藍牙的詳細信息,請參閱藍牙指南。有關對藍牙所做的特定於 Android 8.0 的變動,請參閱 Android 8.0 行爲變動頁面的藍牙部分。
Android 8.0 瞭解用戶的個性化分享首選項,在經過哪些應用分享各個類型的內容方面,也有着更好的把握。例如,若是用戶爲一張收據拍照,Android 8.0 能夠建議費用跟蹤應用;若是用戶自拍,一款社交媒體應用能夠更好地處理圖像。Android 8.0 能夠根據用戶的個性化首選項自動學習全部這些模式。
智能分享適用於 image 以外的內容類型,例如 audio、video、text 和 URL 等。
要啓用智能分享,請將具備最多三個字符串註釋的 ArrayList 添加到分享內容的 intent。這些註釋應說明內容中的主要部分或主題。下面的代碼示例顯示瞭如何向 intent 添加註釋:
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
在兼容設備上,Android 8.0 讓應用能夠幫助用戶以更有意義的方式與文本交互。當用戶長按某個實體中可識別格式的單詞(例如某個地址或餐館名稱)時,系統會選中整個實體。用戶會看到一個浮動工具欄,該工具欄包含能夠處理所選文本實體的應用。例如,若是系統識別出某個地址,它能夠將用戶導向地圖應用。
系統識別的實體包括地址、網址、電話號碼和電子郵件地址。如需瞭解詳細信息,請參閱 TextClassifier。
ndroid 8.0 支持開發者使用如下無障礙功能建立本身的無障礙服務。如需瞭解有關如何讓您的應用更便於訪問的更多信息,請參閱無障礙功能。
您的無障礙服務如今能夠請求在系統的導航區域顯示無障礙功能按鈕,該按鈕讓用戶可從其設備上的任意位置快速激活您的服務功能。要執行此操做,請在某個 AccessibilityServiceInfo 對象的 android:accessibilityFlags 屬性中添加 FLAG_REQUEST_ACCESSIBILITY_BUTTON 標誌。稍後,您可使用 registerAccessibilityButtonCallback() 註冊回調。
注:此功能僅適用於提供軟件渲染導航區域的設備。請始終使用 isAccessibilityButtonAvailable(),並經過實現 onAvailabilityChanged() 根據無障礙功能按鈕的可用性來響應變動。經過該方式,用戶能夠始終訪問您的服務功能,即便該無障礙功能按鈕不受支持或變得不可用。
Android 8.0 引入了 STREAM_ACCESSIBILITY 音量類別,容許您單獨控制無障礙服務音頻輸出的音量,而不會影響設備上的其餘聲音。
要使用這個新的流類型來控制無障礙服務音量,請在無障礙服務中設置 FLAG_ENABLE_ACCESSIBILITY_VOLUME 選項。而後,您可使用 adjustStreamVolume() 更改設備的無障礙服務音頻音量。
您的無障礙服務也能夠響應替代的輸入機制,即沿設備的指紋傳感器按特定方向滑動(上、下、左和右)。要接收有關這些交互的回調,請完成如下一系列步驟:
請記住,並不是全部設備都包含指紋傳感器。您可使用 isHardwareDetected() 函數識別設備是否支持此傳感器。即便對於包含指紋傳感器的設備,您的服務也只有在指紋傳感器不用於身份驗證目的時纔可以使用它。要識別此傳感器什麼時候可用,請調用 isGestureDetectionAvailable() 函數並實現 onGestureDetectionAvailabilityChanged() 回調。
要肯定 TextView 對象中可見字符的位置,您能夠在 EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY 中將其做爲第一個參數傳遞到 refreshWithExtraData() 中。隨後會更新您爲 refreshWithExtraData() 提供的做爲第二個參數的 Bundle 對象,使之包含一個可打包的 Rect 對象數組。每一個 Rect 對象表明某個特定字符的邊界框。
若是您的服務使用 TextToSpeech 對象朗讀屏幕上出現的內容,您能夠獲取有關文本到語音轉換引擎什麼時候開始朗讀單個合成字詞時的準確時間信息,前提是文本到語音轉換引擎提供此信息。當引擎即將開始播放特定範圍文本的音頻時,Text-to-Speech API 會通知您的服務,將使用 onRangeStart() 函數開始朗讀此範圍的文本。
若是您建立本身的 TextToSpeechService 實現,您可使用 rangeStart() 函數支持這一新功能。
AccessibilityNodeInfo 的一些實例使用 AccessibilityNodeInfo.RangeInfo 的某個實例來代表界面元素可接受必定範圍的值。使用 RangeInfo.obtain() 建立範圍或使用 getMin() 和 getMax() 檢索此範圍的極值時,請注意,Android 8.0 規定了標準化單端範圍:
Android 8.0 包含可用於與文本可編輯對象的提示文本進行交互的多個函數:
您的服務如今可使用 GestureDescription.StrokeDescription 構造函數中的最後一個參數 willContinue,指定屬於同一設定手勢的筆劃的順序。
Android 8.0 引入了多個與電話有關的新權限:
這些權限均被劃分爲危險類別,屬於 PHONE 權限組。
Android 8.0 對應用訪問用戶賬號的方式引入多項改進。對於由身份驗證器管理的賬號,身份驗證器在決定對應用隱藏賬號仍是顯示賬號時可使用本身的策略。Android 系統跟蹤能夠訪問特定賬號的應用。
在之前的 Android 版本中,想要跟蹤用戶賬號列表的應用必須獲取有關全部賬號的更新,包括具備不相關類型的賬號。Android 8.0 添加了 addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) 函數,其容許應用指定應接收賬號變動的賬號類型列表。
AccountManager 提供六個新函數以幫助身份驗證器管理哪些應用能夠查看某個賬號:
Android 8.0 引入兩個特殊的軟件包名稱值,以使用 setAccountVisibility(android.accounts.Account, java.lang.String, int) 函數指定未設置的應用的可見性級別。PACKAGE_NAME_KEY_LEGACY_VISIBLE 可見性值應用於具備 GET_ACCOUNTS 權限的應用,而且其目標 Android 版本低於 Android 8.0,或其簽名與針對任意 Android 版本的身份驗證器匹配。PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE 爲以前未設置的應用提供默認的可見性值,對於此類應用,PACKAGE_NAME_KEY_LEGACY_VISIBLE 不適用。
WebView 類如今添加了一個 Safe Browsing API 來加強網絡瀏覽的安全性。如需瞭解詳細信息,請參閱 Google Safe Browsing API。
Android 8.0 爲應用的儀器測試提供如下幾項額外支持。
如今,您能夠指定針對您的應用的默認進程之外的進程運行特定儀器測試。若是您的應用包含多個在不一樣進程中運行的操做組件,此配置很是有用。
要定義非默認進程儀器測試,請導航至您的清單文件,而後導航至所需的
在執行儀器測試時,您能夠經過調用 getProcessName() 檢查正在測試哪一個進程。
如今,經過調用 addResults(),您能夠在執行儀器測試時(而不用等到測試後)報告結果。
爲了更輕鬆地爲您應用的操做組件建立隔離、獨立的界面測試,Android 8.0 引入了 onStartActivity() 函數。要處理您的測試類調用的特定 intent,您能夠在 Instrumentation.ActivityMonitor 類的自定義子類中替換此函數。
當您的測試類調用 intent 時,該函數將返回一個存根 Instrumentation.ActivityResult 對象,而不是執行 intent 自己。經過在您的測試中使用這種模擬 intent 邏輯,您能夠側重於本身的操做組件如何準備和處理您傳遞到不一樣操做組件或徹底不一樣的應用中的 intent。
Android 8.0 爲平臺引入了運行時優化和其餘優化,這些優化將帶來多項性能改進。這些優化包括併發壓縮垃圾回收、更有效的內存利用和代碼區域。
它們能夠加快啓動時間,併爲 OS 和應用帶來更好的性能。
Android 8.0 添加了對更多 OpenJDK Java API 的支持:
若是您想要在 Android Studio 中使用 Java 8 語言功能,您應下載最新的預覽版本。
Android 8.0 擴展了 ICU4J Android 框架 API—,它是 ICU4J API 的子集—,供應用開發者在 android.icu 軟件包中使用。這些 API 使用設備上具備的本地化數據。所以,您無需在 APK 中編譯 ICU4J 庫,從而減小 APK 佔用空間。
表 1. Android 中使用的 ICU、CLDR 和 Unicode 版本。
Android API 級別 | ICU 版本 | CLDR 版本 | Unicode 版本 |
---|---|---|---|
Android 7.0(API 級別 24) | Android 7.1(API 級別 25) | 56 | 28 |
Android 8.0 | 58.2 | 30.0.3 | 9.0 |
已爲運行 Android 8.0 的設備引入新的企業功能和 API。重要功能包括以下:
若是你想第一時間看個人後期文章,掃碼關注公衆號,長期推送Android開發文章、最新動態、開源項目,讓你各類漲姿式。
Android開發666 - 安卓開發技術分享 掃描二維碼加關注