Android 9.0更新
北京時間2018年8月7日上午,Google 發(fā)布了 Android 9.0 操作系統(tǒng)。并宣布系統(tǒng)版本 Android P 被正式命名為代號“Pie”。
Android 9.0 利用人工智能技術(shù),讓手機變得更智能、更快,并且還可以隨著用戶的使用習(xí)慣進(jìn)行調(diào)整。
利用 Wi-Fi RTT 進(jìn)行室內(nèi)定位
Android 9 添加了對 IEEE 802.11mc Wi-Fi 協(xié)議(也稱為 Wi-Fi Round-Trip-Time (RTT))的平臺支持,從而讓您的應(yīng)用可以利用室內(nèi)定位功能。
在運行 Android 9 且具有硬件支持的設(shè)備上,應(yīng)用可以使用 RTT API 來測量與附近支持 RTT 的 Wi-Fi 接入點 (AP) 的距離。 設(shè)備必須已啟用位置服務(wù)并開啟 Wi-Fi 掃描(在 Settings > Location 下),同時您的應(yīng)用必須具有 ACCESS_FINE_LOCATION 權(quán)限。
設(shè)備無需連接到接入點即可使用 RTT。 為了保護(hù)隱私,只有手機可以確定與接入點的距離;接入點無此信息。
如果您的設(shè)備測量與 3 個或更多接入點的距離,您可以使用一個多點定位算法來預(yù)估與這些測量值最相符的設(shè)備位置。 結(jié)果通常精準(zhǔn)至 1 至 2 米。
通過這種精確性,您可以打造新的體驗,例如樓內(nèi)導(dǎo)航、基于精細(xì)位置的服務(wù),如無歧義語音控制(例如,“打開這盞燈”),以及基于位置的信息(如 “此產(chǎn)品是否有特別優(yōu)惠?”)。

顯示屏缺口支持
Android 9 支持最新的全面屏,其中包含為攝像頭和揚聲器預(yù)留空間的屏幕缺口。 通過 DisplayCutout 類可確定非功能區(qū)域的位置和形狀,這些區(qū)域不應(yīng)顯示內(nèi)容。 要確定這些屏幕缺口區(qū)域是否存在及其位置,請使用 getDisplayCutout() 函數(shù)。
全新的窗口布局屬性 layoutInDisplayCutoutMode 讓您的應(yīng)用可以為設(shè)備屏幕缺口周圍的內(nèi)容進(jìn)行布局。 您可以將此屬性設(shè)為下列值之一:
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
可以按以下方法在任何運行 Android 9 的設(shè)備或模擬器上模擬屏幕缺口:
1.啟用開發(fā)者選項。
2.在 Developer options 屏幕中,向下滾動至 Drawing 部分并選擇 Simulate a display with a cutout。
選擇屏幕缺口的大小。
注示:我們建議您通過使用運行 Android 9 的設(shè)備或模擬器測試屏幕缺口周圍的內(nèi)容顯示。

通知
Android 9 引入了多個通知增強功能,可供以 API 級別 28 及以上版本作為目標(biāo)平臺的開發(fā)者使用。
提升短信體驗
從 Android 7.0(API 級別 24)開始,您可以添加一個操作以回復(fù)短信或直接從通知中輸入其他文本。 Android 9 通過下列增強提升了該功能:
- 簡化了針對對話參與者的支持:Person 類可用于識別參與對話的人員,包括他們的頭像和 URI。 現(xiàn)在,許多其他 API(如 addMessage())均可利用 [Person] 類而不是 CharSequence。 Person 類也支持構(gòu)建器設(shè)計模式。
- 支持圖像:現(xiàn)在,Android 9 可在手機的“短信通知”中顯示圖像。 您可以使用對短信使用 setData()來顯示圖像。 以下代碼段演示了如何創(chuàng)建 Person 和包含圖像的短信。
// Create new Person.
Person sender = new Person()
.setName(name)
.setUri(uri)
.setIcon(null)
.build();
// Create image message.
Message message = new Message("Picture", time, sender)
.setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
.addMessage("Check this out!", 0, sender)
.addMessage(message);
- 將回復(fù)另存為草稿:當(dāng)用戶無意中關(guān)閉一個短信通知時,您的應(yīng)用可以檢索系統(tǒng)發(fā)送的 EXTRA_REMOTE_INPUT_DRAFT。 您可以使用此 extra 預(yù)填充應(yīng)用中的文本字段,以便用戶可以完成他們的回復(fù)。
- 確定對話是否為群組對話。您可以使用 setGroupConversation() 以明確確定對話是否為群組對話。
- 為 Intent 設(shè)置語義操作:setSemanticAction() 函數(shù)允許您為操作提供語義含義,如“標(biāo)記為已讀”、“刪除”和“回復(fù)”等。
- SmartReply:Android 9 支持在您的短信應(yīng)用中提供相同的建議回復(fù)。 使用 RemoteInput.setChoices() 為用戶提供一組標(biāo)準(zhǔn)回復(fù)。

圖1-1 附帶了照片的 MessagingStyle

圖2-2 含回復(fù)和對話的 MessagingStyle
渠道設(shè)置、廣播和請勿打擾
Android 8.0 引入了通知渠道,允許您為要顯示的每種通知類型創(chuàng)建可由用戶自定義的渠道。 Android 9 通過下列變更簡化通知渠道設(shè)置:
-
屏蔽渠道組:現(xiàn)在,用戶可以針對某個應(yīng)用在通知設(shè)置中屏蔽整個渠道組。 您可以使用 isBlocked() 函數(shù)確定何時屏蔽一個渠道組,從而不會向該組中的渠道發(fā)送任何通知。此外,您的應(yīng)用可以使用全新的 getNotificationChannelGroup() 函數(shù)查詢當(dāng)前渠道組設(shè)置。
-
全新的廣播 Intent 類型:現(xiàn)在,當(dāng)通知渠道和渠道組的屏蔽狀態(tài)發(fā)生變更時,Android 系統(tǒng)將發(fā)送廣播 Intent。 擁有已屏蔽的渠道或渠道組的應(yīng)用可以偵聽這些 Intent 并做出相應(yīng)的回應(yīng)。 有關(guān)這些 Intent 操作和 extra 的更多信息,請參閱 NotificationManager 參考中更新的常量列表。 有關(guān)響應(yīng)廣播 Intent 的信息,請參閱廣播。
-
NotificationManager.Policy 有 3 種新的“請勿打擾”優(yōu)先級類別:
PRIORITY_CATEGORY_ALARMS 優(yōu)先處理警報。
PRIORITY_CATEGORY_MEDIA優(yōu)先處理媒體源的聲音,
如媒體和語音導(dǎo)航。
PRIORITY_CATEGORY_SYSTEM 優(yōu)先處理系統(tǒng)聲音。
- NotificationManager.Policy 還有 7 種新的“請勿打擾”常量,可以用來抑制視覺中斷:
SUPPRESSED_EFFECT_FULL_SCREEN_INTENT 防止通知啟動全屏 Activity。
SUPPRESSED_EFFECT_LIGHTS 屏蔽通知燈。
SUPPRESSED_EFFECT_PEEK 防止通知短暫進(jìn)入視圖(“滑出”)。
SUPPRESSED_EFFECT_STATUS_BAR 防止通知顯示在支持狀態(tài)欄的設(shè)備的狀態(tài)欄中。
SUPPRESSED_EFFECT_BADGE 在支持標(biāo)志的設(shè)備上屏蔽標(biāo)志。 如需了解詳細(xì)信息,請參閱修改通知標(biāo)志。
SUPPRESSED_EFFECT_AMBIENT 在支持微光顯示的設(shè)備上屏蔽通知。
SUPPRESSED_EFFECT_NOTIFICATION_LIST 防止通知顯示在支持列表視圖(如通知欄或鎖屏)的設(shè)備的列表視圖中。
多攝像頭支持和攝像頭更新
在運行 Android 9 的設(shè)備上,您可以通過兩個或更多物理攝像頭來同時訪問多個視頻流。] 在配備雙前置攝像頭或雙后置攝像頭的設(shè)備上,您可以創(chuàng)建只配備單攝像頭的設(shè)備所不可能實現(xiàn)的創(chuàng)新功能,例如無縫縮放、背景虛化和立體成像。 通過該 API,您還可以調(diào)用邏輯或融合的攝像頭視頻流,該視頻流可在兩個或更多攝像頭之間自動切換。
攝像頭方面的其他改進(jìn)還包括附加會話參數(shù)和 Surface 共享,前者有助于降低首次拍照期間的延遲,而后者則讓攝像頭客戶端能夠處理各種用例,而無需停止并啟動攝像頭視頻流。 我們還針對基于顯示屏的 flash 支持和 OIS 時間戳訪問新增了一些 API,用以實現(xiàn)應(yīng)用級的圖像穩(wěn)定化和特效。
在 Android 9 中,多攝像頭 API支持單色攝像頭,適用于具有 FULL 或 LIMITED 功能的設(shè)備。 單色輸出通過 YUV_420_888 格式實現(xiàn),Y 為灰度,U (Cb) 為 128,V (Cr) 為 128。
在受支持的設(shè)備上,Android 9 還支持外置 USB/UVC 攝像頭。
適用于可繪制對象和位圖的 ImageDecoder
Android 9 引入了 ImageDecoder 類,可提供現(xiàn)代化的圖像解碼方法。 使用該類取代 BitmapFactory 和 BitmapFactory.Options API。
ImageDecoder 讓您可通過字節(jié)緩沖區(qū)、文件或 URI 來創(chuàng)建 Drawable 或 Bitmap。 要解碼圖像,請首先以編碼圖像的來源為參數(shù),調(diào)用 createSource()。
然后,通過傳遞 ImageDecoder.Source對象來調(diào)用 decodeDrawable() 或 decodeBitmap(),從而創(chuàng)建 Drawable] 或 Bitmap。要更改默認(rèn)設(shè)置,請將OnHeaderDecodedListener 傳遞給 decodeDrawable() 或 decodeBitmap()。
ImageDecoder調(diào)用onHeaderDecoded(),以圖像的默認(rèn)寬度和高度(若已知)為參數(shù)。如果編碼圖像是動畫GIF或WebP,decodeDrawable()將返回Drawable,它是AnimatedImageDrawable 類的一個實例。
您可以使用不同的方法來設(shè)置圖像屬性:
- 要將解碼的圖像縮放到精確尺寸,請將目標(biāo)尺寸傳遞給 setTargetSize()。 您也可以使用樣圖尺寸來縮放圖像。 將樣圖尺寸直接傳遞給 setTargetSampleSize()。
- 要在縮放圖像的范圍內(nèi)裁剪圖像,請調(diào)用 setCrop()。
- 要創(chuàng)建可變位圖,請將 true 傳遞給 setMutableRequired()。
通過 ImageDecoder 還可以為圓角或圓形遮罩之類的圖像添加復(fù)雜的定制效果。 以 PostProcessor 類的一個實例作為參數(shù)使用 setPostProcessor(),執(zhí)行您所需的任何繪圖命令。
注:對 AnimatedImageDrawable進(jìn)行后處理時,效果會出現(xiàn)在動畫的所有幀中。
動畫
Android 9 引入了 AnimatedImageDrawable 類,用于繪制和顯示 GIF 和 WebP 動畫圖像。 AnimatedImageDrawable 的工作方式與 AnimatedVectorDrawable 的相似之處在于,都是渲染線程驅(qū)動 AnimatedImageDrawable 的動畫。 渲染線程還使用工作線程進(jìn)行解碼,因此,解碼不會干擾渲染線程的其他操作。 這種實現(xiàn)機制允許您的應(yīng)用在顯示動畫圖像時,無需管理其更新,也不會干擾應(yīng)用界面線程上的其他事件。
可使用 ImageDecoder的實例對AnimatedImageDrawable進(jìn)行解碼。以下代碼段演示如何使用ImageDecoder來解碼AnimatedImageDrawable:
private void decodeImage() throws IOException {
Drawable decodedAnimation = ImageDecoder.decodeDrawable(
ImageDecoder.createSource(getResources(), R.drawable.my_drawable));
if (decodedAnimation instanceof AnimatedImageDrawable) {
// Prior to start(), the first frame is displayed.
((AnimatedImageDrawable) decodedAnimation).start();
}
}
ImageDecoder 有幾個允許您進(jìn)一步修改圖像的函數(shù)。 例如,可使用 setPostProcessor() 函數(shù)來修改圖像的外觀,如應(yīng)用圓形遮罩或圓角。
HDR VP9 視頻、HEIF 圖像壓縮和 Media API
Android 9 新增了對 High Dynamic Range (HDR) VP9 Profile 2 的內(nèi)置支持,因此,現(xiàn)在您可以在支持 HDR 的設(shè)備上為用戶提供來自 YouTube、Play Movies 和其他來源的采用 HDR 的影片。
Android 9 為平臺增加了對 HEIF (heic) 圖像編碼的支持。 MediaMuxer 和 MediaExtractor 類中可支持 HEIF 靜態(tài)圖像示例 HEIF 改進(jìn)了壓縮,可節(jié)省存儲空間和網(wǎng)絡(luò)數(shù)據(jù)流量。 借助 Android 9 設(shè)備上的平臺支持,從后端服務(wù)器發(fā)送和使用 HEIF 圖像輕而易舉。 確保應(yīng)用兼容這種便于共享和顯示的數(shù)據(jù)格式后,嘗試在應(yīng)用中使用 HEIF 作為圖像存儲格式。 您可以使用 ImageDecoder 或 BitmapFactory 進(jìn)行 jpeg 到 heicto 的轉(zhuǎn)換,以通過 jpeg 獲取位圖,并且可以使用 HeifWriter 寫入來自 YUV 字節(jié)緩沖區(qū)、Surface 或 Bitmap 的 HEIF 靜態(tài)圖像。
還可通過 AudioTrack、AudioRecord 和 MediaDrm 類獲取媒體指標(biāo)。
Android 9 向 MediaDRM 類添加了函數(shù)以獲取指標(biāo)、高帶寬數(shù)字內(nèi)容保護(hù) (HDCP) 級別、安全級別和會話數(shù),并對安全性級別和安全停止進(jìn)行更多控制。 如需了解更多詳情,請參閱 API 差異報告。
在 Android 9 中,AAudio API 包含 AAudioStream 屬性,用于 usage、content type 和 input preset。 使用這些屬性可以創(chuàng)建針對 VoIP 或攝像機應(yīng)用調(diào)整的流。 您還可以設(shè)置 SessionID將 AAudio 流與可包含音效的子混音相關(guān)聯(lián)。 使用 AudioEffect API 來控制音效。
Android 9 包含一個用于 DynamicsProcessing 的 AudioEffect API。 借助該類,可以構(gòu)建基于通道的音效,由各種類型(包括均衡、多頻帶壓縮和限幅器)的多個階段組成。 頻帶和活動階段的數(shù)量可配置,而且大多數(shù)參數(shù)可實時控制。
JobScheduler 中的流量費用敏感度
從 Android 9 開始,JobScheduler 可以使用運營商提供的網(wǎng)絡(luò)狀態(tài)信號來改善與網(wǎng)絡(luò)有關(guān)的作業(yè)處理。
作業(yè)可以聲明其預(yù)估的數(shù)據(jù)大小、信號預(yù)提取,并指定具體的網(wǎng)絡(luò)要求。 JobScheduler 然后根據(jù)網(wǎng)絡(luò)狀態(tài)管理工作。 例如,當(dāng)網(wǎng)絡(luò)顯示擁塞時,JobScheduler 可能會延遲較大的網(wǎng)絡(luò)請求。 如果使用的是不按流量計費的網(wǎng)絡(luò),則 JobScheduler 可運行預(yù)提取作業(yè)以提升用戶體驗(例如預(yù)提取標(biāo)題)。
添加作業(yè)時,確保使用 setEstimatedNetworkBytes()、setPrefetch() 和 setRequiredNetwork()(如果適用),以幫助 JobScheduler 正確處理工作。 在執(zhí)行作業(yè)時,請確保使用 JobParameters.getNetwork() 返回的 Network 對象。 否則,您將隱式使用設(shè)備的默認(rèn)網(wǎng)絡(luò),其可能不符合您的要求,從而導(dǎo)致意外的流量消耗。
Neural Networks API 1.1
Android 8.1(API 級別 27)中引入了 Neural Networks API 以加快 Android 設(shè)備上機器學(xué)習(xí)的速度。 Android 9 擴(kuò)展和改進(jìn)了該 API,增加了對九種新運算的支持:
- 元素級數(shù)學(xué)運算:
ANEURALNETWORKS_DIV
ANEURALNETWORKS_SUB
- 數(shù)組運算:
ANEURALNETWORKS_BATCH_TO_SPACE_ND
ANEURALNETWORKS_SPACE_TO_BATCH_ND
ANEURALNETWORKS_SQUEEZE
ANEURALNETWORKS_STRIDED_SLICE
ANEURALNETWORKS_TRANSPOSE
ANEURALNETWORKS_PAD
ANEURALNETWORKS_MEAN
此外,API 還引入了一個新函數(shù),即 ANeuralNetworksModel_relaxComputationFloat32toFloat16(),允許您指定是否計算范圍和精度低至 IEEE 754 16 位浮點格式的 ANEURALNETWORKS_TENSOR_FLOAT32。
自動填充框架
Android 9 引入了多項改進(jìn),自動填充服務(wù)可以利用這些改進(jìn)進(jìn)一步增強用戶填寫表單時的體驗。 如需詳細(xì)了解如何在您的應(yīng)用中使用自動填充功能,請參閱自動填充框架指南。
安全增強功能
Android 9 引入了若干安全功能,詳見以下各節(jié)摘要說明。
Android Protected Confirmation
運行 Android 9 或更高版本的受支持設(shè)備賦予您使用 Android Protected Confirmation 的能力。 使用該工作流時,您的應(yīng)用會向用戶顯示提示,請他們批準(zhǔn)一個簡短的聲明。 應(yīng)用可以通過這個聲明再次確認(rèn),用戶確實想完成一項敏感事務(wù),例如付款。
如果用戶接受該聲明,Android 密鑰庫會收到并存儲由密鑰哈希消息身份驗證代碼 (HMAC) 保護(hù)的加密簽名。 Android 密鑰庫確認(rèn)消息的有效性之后,您的應(yīng)用可以使用在可信執(zhí)行環(huán)境 (TEE) 下通過 trustedConfirmationRequired 生成的密鑰來簽署用戶已接受的消息。 該簽名具有很高的可信度,它表示用戶已看過聲明并同意其內(nèi)容。
統(tǒng)一生物識別身份驗證對話框
在 Android 9 中,系統(tǒng)代表您的應(yīng)用提供生物識別身份驗證對話框。 該功能可創(chuàng)建標(biāo)準(zhǔn)化的對話框外觀、風(fēng)格和位置,讓用戶更加確信,他們在使用可信的生物識別憑據(jù)檢查程序進(jìn)行身份驗證。
如果您的應(yīng)用使用 FingerprintManager 向用戶顯示指紋身份驗證對話框,請切換到改用 BiometricPrompt。 BiometricPrompt 依賴系統(tǒng)來顯示身份驗證對話框。 它還會改變其行為,以適應(yīng)用戶所選擇的生物識別身份驗證類型。
注:在應(yīng)用中使用 BiometricPrompt 之前,應(yīng)該先使用 hasSystemFeature()函數(shù)以確保設(shè)備支持 FEATURE_FINGERPRINT、FEATURE_IRIS 或 FEATURE_FACE。
如果設(shè)備不支持生物識別身份驗證,可以回退為使用 createConfirmDeviceCredentialIntent() 函數(shù)驗證用戶的 PIN 碼、圖案或密碼。
硬件安全性模塊
運行 Android 9 或更高版本的受支持設(shè)備可擁有 StrongBox Keymaster,它是位于硬件安全性模塊中的 Keymaster HAL 的一種實現(xiàn)。 該模塊包含以下組成部分:
- 自己的 CPU。
- 安全存儲空間。
- 真實隨機數(shù)生成器。
- 可抵御軟件包篡改和未經(jīng)授權(quán)線刷應(yīng)用的附加機制。
檢查存儲在 StrongBox Keymaster 中的密鑰時,系統(tǒng)會通過可信執(zhí)行環(huán)境 (TEE) 證實密鑰的完整性。
保護(hù)對密鑰庫進(jìn)行的密鑰導(dǎo)入
Android 9 通過利用 ASN.1?編碼密鑰格式將已加密密鑰安全導(dǎo)入密鑰庫的功能,提高了密鑰解密的安全性。 Keymaster 隨后會在密鑰庫中將密鑰解密,因此密鑰的內(nèi)容永遠(yuǎn)不會以明文形式出現(xiàn)在設(shè)備的主機內(nèi)存中。
注:只有附帶 Keymaster 4 或更高版本的設(shè)備才支持該功能。
具有密鑰輪轉(zhuǎn)的 APK 簽名方案
Android 9 新增了對 APK Signature Scheme v3 的支持。該架構(gòu)提供的選擇可以在其簽名塊中為每個簽名證書加入一條輪轉(zhuǎn)證據(jù)記錄。 利用此功能,應(yīng)用可以通過將 APK 文件過去的簽名證書鏈接到現(xiàn)在簽署應(yīng)用時使用的證書,從而使用新簽名證書來簽署應(yīng)用。
注:運行 Android 8.1(API 級別 27)或更低版本的設(shè)備不支持更改簽名證書。 如果應(yīng)用的 minSdkVersion 為 27 或更低,除了新簽名之外,可使用舊簽名證書來簽署應(yīng)用。
只允許在未鎖定設(shè)備上進(jìn)行密鑰解密的選項
Android 9 引入了 unlockedDeviceRequired 標(biāo)志。 此選項確定在允許使用指定密鑰對任何正在傳輸或存儲的數(shù)據(jù)進(jìn)行解密之前,密鑰庫是否要求屏幕解鎖。 這些類型的密鑰非常適合用于加密要存儲在磁盤上的敏感數(shù)據(jù),例如健康或企業(yè)數(shù)據(jù)。 該標(biāo)志為用戶提供了更高的保證,即使手機丟失或被盜,在設(shè)備鎖定的情況下,無法對數(shù)據(jù)進(jìn)行解密。
注:unlockedDeviceRequired 標(biāo)志啟用之后,仍然可以隨時進(jìn)行加密和簽名驗證。 該標(biāo)志可防止在設(shè)備解鎖時“僅解密”數(shù)據(jù)。
在設(shè)備鎖定時要確保密鑰安全不被解密,可通過將 true 傳遞給 setUnlockedDeviceRequired() 函數(shù)啟用該標(biāo)志。 完成該步驟之后,當(dāng)用戶的屏幕被鎖定時,使用該密鑰進(jìn)行解密或簽署數(shù)據(jù)的任何嘗試都會失敗。 鎖定設(shè)備在可以訪問之前,需要 PIN 碼、密碼、指紋或者一些其他可信因素。
舊版加密支持
附帶 Keymaster 4 的 Android 9 設(shè)備支持三重數(shù)據(jù)加密算法(簡稱三重 DES)。 如果您的應(yīng)用與需要三重 DES 的舊版系統(tǒng)進(jìn)行互操作,請使用這種加密來加密敏感憑據(jù)。
Android 備份
Android 9 新增了與備份和還原有關(guān)的功能和開發(fā)者選項。 這些更改的詳細(xì)信息如以部分下所示。
客戶端加密備份
Android 9 新增了對使用客戶端密鑰加密 Android 備份的支持。 滿足下列條件時會自動啟用該支持功能:
- 用戶已使用 Android 9 或更高版本啟用備份。
- 用戶已為其設(shè)備設(shè)置屏幕鎖定,需要 PIN 碼、圖案或密碼才能解鎖。
該隱私措施啟用之后,從用戶設(shè)備制作的備份還原數(shù)據(jù)時,會要求提供設(shè)備的 PIN 碼、圖案或密碼。 如需詳細(xì)了解該項功能背后的技術(shù),請參閱 Google 云密鑰保險柜服務(wù)白皮書。
定義備份所需的設(shè)備條件
如果您的應(yīng)用數(shù)據(jù)包含敏感信息或偏好,Android 9 可讓您定義設(shè)備條件(例如在客戶端加密已啟用或者正在進(jìn)行本地設(shè)備到設(shè)備傳輸時),數(shù)據(jù)將依據(jù)該條件包括在用戶的備份中。
窗口變更詳情
Android 9 讓您可以在應(yīng)用同時重繪多個窗口時,更輕松地跟蹤應(yīng)用窗口的更新。 當(dāng)發(fā)生 TYPE_WINDOWS_CHANGED 事件時,可使用 getWindowChanges() API 來確定窗口發(fā)生的變更。 在多窗口更新期間,每個窗口都會生成自己的一組事件。 getSource() 函數(shù)返回與每個事件相關(guān)聯(lián)的窗口的根視圖。
如果應(yīng)用已為其 View 對象定義無障礙功能窗格標(biāo)題,您的 Service 將可以識別應(yīng)用界面何時進(jìn)行更新。 TYPE_WINDOW_STATE_CHANGED 事件發(fā)生時,可使用 getContentChangeTypes() 所返回的類型來確定窗口發(fā)生的變更。 例如,框架可以檢測窗格何時有新標(biāo)題或者窗格何時消失。
文本
Android 9 為平臺提供了以下與文本相關(guān)的功能:
- 文本預(yù)先計算:PrecomputedText 類使您能提前計算和緩存所需信息,改善了文本渲染性能。 它還使您的應(yīng)用可以在主線程之外執(zhí)行文本布局。
- 放大器:Magnifier 類是一種可提供放大器 API 的微件,可在所有應(yīng)用中實現(xiàn)一致的放大器功能體驗。
- Smart Linkify:Android 9 增強了 TextClassifier 類,該類可利用機器學(xué)習(xí)在選定文本中識別一些實體并建議采取相應(yīng)的操作。 例如,TextClassifier 可以讓您的應(yīng)用檢測到用戶選擇了電話號碼。 然后,您的應(yīng)用可以建議用戶使用該號碼撥打電話。 TextClassifier 中的功能取代了 Linkify 類的功能。
- 文本布局:借助幾種便捷函數(shù)和屬性,可以更輕松地實現(xiàn)界面設(shè)計。 如需了解詳細(xì)信息,請參閱 TextView 參考文檔。
DEX 文件的 ART 提前轉(zhuǎn)換
在運行 Android 9 或更高版本的設(shè)備上,Android 運行時 (ART) 提前編譯器通過將應(yīng)用軟件包中的 DEX 文件轉(zhuǎn)換為更緊湊的表示形式,進(jìn)一步優(yōu)化了壓縮的 Dalvik Executable 格式 (DEX) 文件。 此項變更可讓您的應(yīng)用啟動更快并消耗更少的磁盤空間和內(nèi)存。
這種改進(jìn)特別有利于磁盤 I/O 速度較慢的低端設(shè)備。
設(shè)備端系統(tǒng)跟蹤
Android 9 允許您通過設(shè)備記錄系統(tǒng)跟蹤記錄,然后與您的開發(fā)團(tuán)隊分享這些記錄的報告。 該報告支持多種格式,包括 HTML。
通過收集這些跟蹤記錄,您可以獲取與應(yīng)用進(jìn)程和線程相關(guān)的計時數(shù)據(jù),并查看其他類型的具有全局意義的設(shè)備狀態(tài)。
注:您無需設(shè)置您的代碼來記錄跟蹤記錄,但這樣做可以幫助您查看應(yīng)用代碼的哪些部分可能會導(dǎo)致線程掛起或界面卡頓。
本文內(nèi)容來自google中文官網(wǎng):
https://developer.android.google.cn/about/versions/pie/android-9.0
如果你想第一時間看我的后期文章,掃碼關(guān)注公眾號,長期推送Android開發(fā)文章、最新動態(tài)、開源項目,讓你各種漲姿勢。
Android開發(fā)666 - 安卓開發(fā)技術(shù)分享
掃描二維碼加關(guān)注


浙公網(wǎng)安備 33010602011771號