Android 9 (API 層級 28) 為使用者和開發人員推出許多新功能。這份文件會說明開發人員適用的新功能。
如要瞭解新版 API,請參閱 API 差異比較表或 Android API 參考資料。此外,請務必查看「Android 9 行為變更」,瞭解平台變更可能對應用程式造成的影響。
使用 Wi-Fi RTT 進行室內定位

Android 9 新增了 IEEE 802.11-2016 Wi-Fi 協定 (也稱為 Wi-Fi Round-Trip-Time (RTT)) 的平台支援功能,方便您在應用程式中運用室內定位功能。
在搭載 Android 9 且支援硬體的裝置上,應用程式可使用 RTT API 測量與附近支援 RTT 的 Wi-Fi存取點 (AP) 的距離。裝置必須啟用定位服務並開啟 Wi-Fi 掃描 (位於「設定」>「位置資訊」),且應用程式必須具備 ACCESS_FINE_LOCATION
權限。裝置不必連線至存取點,即可使用 RTT。為保護隱私,只有手機可以判斷與存取點的距離,存取點不會有這項資訊。
如果裝置測量與 3 個以上存取點的距離,您可以使用多邊定位演算法,估算最符合這些測量的裝置位置。結果通常準確度在 1 到 2 公尺內。
有了這項精確度,您就能打造全新體驗,例如室內導航和精細的適地性服務,像是消除語音控制的歧義 (例如「開啟這盞燈」) 和適地性資訊 (例如「這項產品有特惠嗎?」)。
如要查看 WiFi RTT API 的使用情形,請參閱 Android WifiRttScan 示範應用程式。
詳情請參閱「Wi-Fi 定位:使用 RTT 測距」。
支援螢幕凹口

使用模擬器測試螢幕凹口
Android 9 支援最新的無邊框螢幕,這類螢幕會為攝影機和喇叭預留凹口。DisplayCutout
類別可讓您找出不應顯示內容的非功能區域位置和形狀。如要判斷這些凹口區域是否存在及位置,請使用 getDisplayCutout()
方法。
新的視窗版面配置屬性 layoutInDisplayCutoutMode
可讓應用程式在裝置凹口周圍配置內容。你可以將這項屬性設為下列其中一個值:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
您可以在搭載 Android 9 的任何裝置或模擬器上模擬螢幕凹口,方法如下:
- 啟用開發人員選項。
- 在「開發人員選項」畫面中,向下捲動至「繪圖」部分,然後選取「模擬有凹口的螢幕」。
- 選取剪裁大小。
通知
Android 9 針對通知進行了多項強化,只要開發人員指定 API 級別 28 以上版本,就能使用這些功能。

附加相片的 MessagingStyle。

包含回覆和對話的 MessagingStyle。
如需使用通知的範例程式碼 (包括 Android 9 功能),請參閱「People Sample」。
更優質的訊息體驗
從 Android 7.0 (API 級別 24) 開始,您可以新增動作,讓使用者回覆訊息,或直接在通知中輸入其他文字。Android 9 強化了這項功能,具體來說有以下改進:
簡化對話參與者支援:
Person
類別可用於識別對話參與者,包括他們的虛擬人偶和 URI。許多其他 API (例如addMessage()
) 現在會利用Person
類別,而非CharSequence
。Person
類別也支援建構工具設計模式。支援圖片:Android 9 現在會在手機的訊息通知中顯示圖片。您可以在訊息中使用
setData()
顯示圖片。下列程式碼片段說明如何建立Person
和含有圖片的訊息。
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// 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);
將回覆內容儲存為草稿:如果使用者不小心關閉訊息通知,您的應用程式可以擷取系統傳送的
EXTRA_REMOTE_INPUT_DRAFT
。您可以使用這項額外資訊,在應用程式中預先填入文字欄位,讓使用者完成回覆。判斷對話是否為群組對話:您可以透過
setGroupConversation()
刻意將對話識別為群組或非群組對話。設定意圖的語意動作:您可以使用
setSemanticAction()
方法,為動作賦予語意,例如「標示為已讀」、「刪除」和「回覆」等。智慧回覆:Android 9 支援訊息應用程式中提供的建議回覆。使用
RemoteInput.setChoices()
為使用者提供一系列標準回覆。
頻道設定、廣播和「零打擾」模式
Android 8.0 推出通知管道,可讓您為要顯示的每種通知建立使用者可自訂的管道。Android 9 簡化了通知管道設定,具體變更如下:
封鎖管道群組:使用者現在可以在應用程式的通知設定中封鎖整個管道群組。您可以使用
isBlocked()
方法,判斷群組是否遭到封鎖,並因此不傳送該群組中任何管道的通知。此外,應用程式可以使用新的
getNotificationChannelGroup()
方法,查詢目前的管道群組設定。新的廣播意圖類型:Android 系統現在會在通知管道和管道群組的封鎖狀態變更時,傳送廣播意圖。擁有遭封鎖頻道或群組的應用程式可以監聽這些意圖,並做出適當反應。如要進一步瞭解這些意圖動作和額外資訊,請參閱
NotificationManager
參考資料中的更新常數清單。如要瞭解如何對廣播意圖做出反應,請參閱「廣播」。NotificationManager.Policy
新增了三種「請勿打擾」優先類別:PRIORITY_CATEGORY_ALARMS
優先處理鬧鐘。PRIORITY_CATEGORY_MEDIA
優先播放媒體來源的音效,例如媒體和語音導航。PRIORITY_CATEGORY_SYSTEM
優先播放系統音效。
NotificationManager.Policy
也新增了七個「零打擾」常數,可用於抑制視覺干擾:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
可防止通知啟動全螢幕活動。SUPPRESSED_EFFECT_LIGHTS
遮住通知燈。SUPPRESSED_EFFECT_PEEK
可防止通知短暫滑入檢視畫面 (「偷窺」)。SUPPRESSED_EFFECT_STATUS_BAR
可防止通知顯示在支援狀態列的裝置上。SUPPRESSED_EFFECT_BADGE
裝置支援徽章功能,但系統會封鎖徽章。詳情請參閱「修改通知徽章」。SUPPRESSED_EFFECT_AMBIENT
在支援微光螢幕的裝置上封鎖通知。SUPPRESSED_EFFECT_NOTIFICATION_LIST
可防止通知顯示在支援清單檢視畫面的裝置上,例如通知欄或螢幕鎖定畫面。
支援多部攝影機和攝影機更新
在搭載 Android 9 的裝置上,您可以同時存取兩個以上的實體攝影機的串流內容。在具備雙前置或雙後置鏡頭的裝置上,您可以打造單一鏡頭無法實現的創新功能,例如無縫變焦、散景和立體視覺。您也可以透過 API 呼叫邏輯或融合攝影機串流,在兩部以上的攝影機之間自動切換。
相機的其他改進項目包括:額外的「工作階段」參數,有助於減少初始擷取期間的延遲;以及表面共用功能,讓相機用戶端處理各種用途,不必停止及啟動相機串流。我們也新增了 API,可支援螢幕閃光燈,並存取光學防手震時間戳記,以便在應用程式層級進行影像穩定處理和套用特效。
在 Android 9 中,多鏡頭 API 支援具備 FULL
或 LIMITED
功能的裝置使用單色相機。如要輸出單色影像,請使用 YUV_420_888
格式,並將 Y 設為灰階、U (Cb) 設為 128,以及 V (Cr) 設為 128。
Android 9 也支援在支援的裝置上使用外接式 USB/UVC 攝影機。
適用於可繪項目和點陣圖的 ImageDecoder
Android 9 導入了 ImageDecoder
類別,提供現代化的圖片解碼方法。請使用這個類別,而非 BitmapFactory
和 BitmapFactory.Options
API。
ImageDecoder
可讓您從位元組緩衝區、檔案或 URI 建立 Drawable
或 Bitmap
。如要解碼圖片,請先使用編碼圖片的來源呼叫 createSource()
。然後,傳遞 ImageDecoder.Source
物件,呼叫 decodeDrawable()
或 decodeBitmap()
,建立 Drawable
或 Bitmap
。如要變更預設設定,請將 OnHeaderDecodedListener
傳遞至 decodeDrawable()
或 decodeBitmap()
。ImageDecoder
會在得知圖片的預設寬度和高度後,呼叫 onHeaderDecoded()
。如果編碼圖片是 GIF 動畫或 WebP,decodeDrawable()
會傳回 Drawable
,這是 AnimatedImageDrawable
類別的例項。
您可以透過不同方法設定圖片屬性:
- 如要將解碼後的圖片縮放至確切大小,請將目標尺寸傳遞至
setTargetSize()
。您也可以使用樣本大小縮放圖片。直接將樣本大小傳遞至setTargetSampleSize()
。 - 如要在縮放圖片的範圍內裁剪圖片,請呼叫
setCrop()
。 - 如要建立可變動的點陣圖,請將
true
傳遞至setMutableRequired()
。
ImageDecoder
也可讓您為圖片加上自訂的複雜效果,例如圓角或圓形遮罩。搭配 PostProcessor
類別的執行個體使用 setPostProcessor()
,即可執行任何繪圖指令。
動畫
Android 9 推出 AnimatedImageDrawable
類別,用於繪製及顯示 GIF 和 WebP 動畫圖片。AnimatedImageDrawable
的運作方式與 AnimatedVectorDrawable
類似,因為算繪執行緒會驅動 AnimatedImageDrawable
的動畫。算繪執行緒也會使用工作執行緒解碼,因此解碼不會干擾算繪執行緒上的其他作業。這項實作方式可讓應用程式顯示動畫圖片,而不必管理更新或干擾應用程式 UI 執行緒上的其他事件。
AnimatedImageDrawable
可以使用 ImageDecoder
的例項解碼。下列程式碼片段說明如何使用 ImageDecoder
解碼 AnimatedImageDrawable
:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
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
提供多種方法,可供進一步修改圖片。舉例來說,您可以使用 setPostProcessor()
方法修改圖片外觀,例如套用圓形遮罩或圓角。
HDR VP9 影片、HEIF 圖片壓縮和媒體 API
Android 9 內建高動態範圍 (HDR) VP9 Profile 2 的支援功能,方便你在支援 HDR 的裝置上,透過 YouTube、Play 電影和其他來源,向使用者提供 HDR 影片。
Android 9 也新增支援使用「高效率圖片檔案格式」(HEIF 或 HEIC) 編碼圖片,可提升壓縮效率,並減少儲存空間和網路數據用量。MediaMuxer
和 MediaExtractor
類別支援 HEIF 靜態圖片範例。Android 9 裝置支援這項平台功能,因此您可以輕鬆從後端伺服器傳送及使用 HEIF 圖片。確認應用程式支援這種資料格式,可分享及顯示圖片後,不妨試試在應用程式中將 HEIF 設為圖片儲存格式。您可以使用 ImageDecoder
或 BitmapFactory
(從 JPEG 檔案取得點陣圖),將 JPEG 轉換為 HEIC。接著,您可以使用 HeifWriter
從 YUV 位元組緩衝區或 Surface
或 Bitmap
的執行個體寫入 HEIF 靜態圖片。
您也可以透過 AudioTrack
、AudioRecord
和 MediaDrm
類別取得媒體指標。
Android 9 導入了多種方法,可供 MediaDRM
類別取得指標、HDCP 級別、安全級別和工作階段數量,並進一步控管安全級別和安全停止。詳情請參閱 API 差異報表。
在 Android 9 中,AAudio API 新增了對多項 AAudioStream 屬性的支援,包括用途、內容類型和輸入預設值。您可以使用這些屬性建立適合 VoIP 或攝影機應用程式的串流。您也可以設定工作階段 ID,將 AAudio 串流與可加入效果的子混音建立關聯。使用 AudioEffect
API 控制效果。
Android 9 推出 AudioEffect
API,用於動態處理。透過這個類別,您可以在多個階段建構以聲道為基礎的音訊效果,包括等化、多頻帶壓縮和限制器。您可以設定樂團數量和活動階段,並即時控制大多數參數。
JobScheduler 中的資料成本敏感度
從 Android 9 開始,JobScheduler
可以使用電信業者提供的網路狀態信號,改善網路相關工作的處理方式。
工作可以宣告預估資料大小、發出預先擷取信號,以及指定詳細的網路需求。JobScheduler
接著會根據網路狀態管理工作。舉例來說,如果網路信號指出網路壅塞,JobScheduler
可能會延後大型網路要求。在非按流量計費的網路上,JobScheduler
可以執行預先擷取工作,例如預先擷取新聞標題,提升使用者體驗。
新增工作時,請視情況使用 setEstimatedNetworkBytes()
、setPrefetch()
和 setRequiredNetwork()
,協助 JobScheduler
正確處理工作。執行工作時,請務必使用 JobParameters.getNetwork()
傳回的 Network
物件。否則系統會隱含使用裝置的預設網路,這可能不符合您的需求,導致非預期的資料用量。
Neural Networks API 1.1
Android 8.1 (API 級別 27) 推出了 Neural Networks API,可加速 Android 裝置端機器學習作業。Android 9 擴充並改善了 API,新增了九項作業的支援功能:
- 元素級別數學運算:
- 陣列運算:
已知問題:將 ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
張量傳遞給 Android 9 以上版本中提供的 ANEURALNETWORKS_PAD
運算時,NNAPI 的輸出可能與更高層級機器學習架構 (例如 TensorFlow Lite) 的輸出不相符。您應改為僅傳遞
ANEURALNETWORKS_TENSOR_FLOAT32
,直到問題解決為止。
此外,這個 API 也導入了新的函式 ANeuralNetworksModel_relaxComputationFloat32toFloat16()
,可讓您指定是否要以 IEEE 754 16 位元浮點格式的範圍和精確度,計算 ANEURALNETWORKS_TENSOR_FLOAT32
。
自動填入架構
Android 9 推出多項改良功能,自動填入服務可實作這些功能,進一步提升填寫表單時的使用者體驗。如要進一步瞭解如何在應用程式中使用自動填入功能,請參閱「自動填入架構」指南。
安全性增強項目
Android 9 推出多項安全性功能,以下各節將摘要說明:
Android 保護確認
搭載 Android 9 以上版本的支援裝置可使用 Android 保護確認機制。使用這項工作流程時,應用程式會對使用者顯示提示,請他們核准一則簡短聲明。這項聲明可讓應用程式再次確認使用者要完成機密交易,例如付款。
如果使用者接受聲明,Android Keystore 就會接收並儲存受金鑰雜湊訊息驗證碼 (HMAC) 保護的加密編譯簽章。Android Keystore 確認訊息有效後,應用程式就能使用受信任執行環境 (TEE) 中 trustedConfirmationRequired
產生的金鑰,簽署使用者接受的訊息。該簽章有極高可信度,表示使用者已看過且同意該聲明。
注意:Android 保護確認機制不會為使用者提供安全資訊管道。除了 Android 平台提供的保證外,應用程式不得假設其他機密保證。請特別注意,勿利用此工作流程,顯示通常不會出現在使用者裝置上的機密資訊。
如要瞭解如何新增 Android 保護確認支援,請參閱「Android 保護確認」指南。
統一的生物辨識驗證對話方塊
在 Android 9 中,系統會代表應用程式提供生物特徵辨識驗證對話方塊。這項功能會為對話方塊建立標準化的外觀、風格和位置,讓使用者更確信自己是透過可信的生物特徵辨識憑證檢查程式進行驗證。
如果您的應用程式使用 FingerprintManager
向使用者顯示指紋驗證對話方塊,請改用 BiometricPrompt
。BiometricPrompt
會依賴系統顯示驗證對話方塊。此外,也會根據使用者選擇的生物特徵辨識驗證類型調整行為。
硬體安全性模組
搭載 Android 9 以上版本的支援裝置可具有 StrongBox KeyMint (先前為 Keymaster),這是 KeyMint (先前為 Keymaster) HAL 的實作項目,位於硬體安全性模組中。模組包含以下內容:
- 專屬 CPU。
- 安全儲存空間。
- 真正的隨機號碼產生器。
- 防止套件遭到竄改和未經授權側載應用程式的其他機制。
檢查儲存在 StrongBox KeyMint 中的金鑰時,系統會透過受信任的執行環境 (TEE) 驗證金鑰的完整性。
如要進一步瞭解如何使用 StrongBox KeyMint,請參閱「硬體安全模組」。
安全地將金鑰匯入 KeyStore
Android 9 新增了使用 ASN.1 編碼金鑰格式,安全地將加密金鑰匯入 KeyStore 的功能,進一步提升金鑰解密安全性。接著,KeyMint 會解密 KeyStore 中的金鑰,這樣在裝置主機記憶體中,金鑰內容就一律不會顯示為明文。
進一步瞭解如何以更安全的方式匯入加密金鑰。
採用金鑰輪替的 APK 簽章配置
Android 9 新增對 APK 簽署配置 v3 的支援。這個機制可選擇在每個簽署憑證的簽署區塊中,加入輪播證明記錄。這項功能可將 APK 檔案過去的簽署憑證連結至目前的簽署憑證,讓應用程式使用新的簽署憑證。
進一步瞭解如何使用 apksigner
輪替金鑰。
可選擇僅允許在裝置解鎖時解密金鑰
Android 9 導入了 unlockedDeviceRequired
旗標。這個選項會決定金鑰儲存區是否必須先解鎖螢幕,才能使用指定金鑰解密任何傳輸中或儲存的資料。這類金鑰非常適合用來加密要儲存在磁碟上的機密資料,例如健康或企業資料。如果手機遺失或遭竊,這項標記可確保裝置鎖定時資料不會遭到解密,讓使用者更加安心。
如要在裝置鎖定時保護金鑰,避免遭到解密,請將 true
傳遞至 setUnlockedDeviceRequired()
方法,啟用旗標。完成這個步驟後,使用者螢幕鎖定時,任何嘗試使用這個金鑰解密或簽署資料的行為都會失敗。裝置鎖定後,必須輸入 PIN 碼、密碼、指紋或使用其他信任因素,才能存取裝置。
舊版加密支援
搭載 Keymaster 4 的 Android 9 裝置支援三倍資料加密演算法 (或稱 Triple DES)。如果應用程式與需要 Triple DES 的舊版系統互通,請在加密機密憑證時使用這類密碼。
如要進一步瞭解如何提高應用程式的安全性,請參閱「Android 開發人員安全性」。
淘汰 WPS
Wi-Fi 保護設定 (WPS) 已停用,因為這項功能有安全疑慮。
Android 備份
Android 9 新增了與備份及還原相關的功能和開發人員選項。如要瞭解這些變更的詳細資訊,請參閱下列各節。
用戶端加密備份
Android 9 新增支援功能,可透過用戶端密鑰加密 Android 備份。符合下列條件時,系統會自動啟用這項支援:
啟用這項隱私權措施後,使用者必須輸入裝置的 PIN 碼、解鎖圖案或密碼,才能從裝置備份還原資料。如要進一步瞭解這項功能背後的技術,請參閱 Google Cloud Key Vault Service 白皮書。
定義備份所需的裝置條件
如果應用程式資料包含私密資訊或偏好設定,Android 9 可讓您定義裝置條件,決定是否將應用程式資料納入使用者備份,例如啟用用戶端加密或進行本機裝置對裝置轉移時。
如要進一步瞭解如何備份 Android 裝置上的資料,請參閱「資料備份總覽」。
無障礙設定
Android 9 針對無障礙架構進行強化,讓您更輕鬆地為應用程式使用者提供更優質的體驗。
導覽語意
Android 9 新增的屬性可讓您更輕鬆地定義無障礙服務 (尤其是螢幕閱讀器) 在螢幕各部分之間的導覽方式。視障使用者可透過這些屬性,在應用程式的 UI 中快速瀏覽文字並進行選取。
舉例來說,在購物應用程式中,螢幕閱讀器可協助使用者直接從一個特惠類別導覽至下一個,不必先讀取類別中的所有項目,再移至下一個類別。
無障礙窗格標題
在 Android 8.1 (API 級別 27) 以下版本中,無障礙服務不一定能判斷螢幕的特定窗格何時更新,例如活動以一個片段取代另一個片段時。窗格由邏輯分組的視覺相關 UI 元素組成,通常包含片段。
在 Android 9 中,您可以為這些窗格提供無障礙窗格標題,或個別可識別的標題。如果窗格有無障礙窗格標題,當窗格變更時,無障礙服務會收到更詳細的資訊。這項功能可讓服務為使用者提供更精細的資訊,瞭解 UI 的變更內容。
如要指定窗格的標題,請使用 android:accessibilityPaneTitle
屬性。您也可以使用 setAccessibilityPaneTitle()
,在執行階段更新取代的 UI 窗格標題。舉例來說,您可以為 Fragment
物件的內容區域提供標題。
以標題為準的導覽
如果應用程式顯示的文字內容包含邏輯標題,請將代表這些標題的 View
例項的 android:accessibilityHeading
屬性設為 true
。加入這些標題後,無障礙服務就能協助使用者直接從一個標題瀏覽到下一個標題。任何無障礙服務都能使用這項功能,改善使用者的 UI 瀏覽體驗。
群組導覽和輸出
傳統上,螢幕閱讀器會使用 android:focusable
屬性,判斷何時應將 ViewGroup
或 View
物件集合視為單一單位朗讀。這樣一來,使用者就能瞭解這些檢視畫面在邏輯上互有關聯。
在 Android 8.1 以下版本中,您需要將 ViewGroup
內的每個 View
物件標示為不可聚焦,並將 ViewGroup
本身標示為可聚焦。這種排列方式導致某些 View
執行個體標示為可聚焦,使得鍵盤導覽更加繁瑣。
從 Android 9 開始,如果讓 View
物件可聚焦會造成不良後果,您可以使用 android:screenReaderFocusable
屬性取代 android:focusable
屬性。螢幕閱讀器會將焦點放在已將 android:screenReaderFocusable
或 android:focusable
設為 true
的所有元素上。
便利動作
Android 9 新增支援功能,可代表使用者執行便利操作:
- 與工具提示互動
- 無障礙架構新增的功能可讓您在應用程式的 UI 中存取工具提示。使用
getTooltipText()
讀取工具提示的文字,並使用ACTION_SHOW_TOOLTIP
和ACTION_HIDE_TOOLTIP
指示View
的例項顯示或隱藏其工具提示。 - 新增全域動作
- Android 9 在
AccessibilityService
類別中新增支援兩項裝置動作。您的服務可分別使用GLOBAL_ACTION_LOCK_SCREEN
和GLOBAL_ACTION_TAKE_SCREENSHOT
動作,協助使用者鎖定裝置及擷取螢幕截圖。
視窗變更詳細資料
Android 9 可讓您在應用程式同時重繪多個視窗時,更輕鬆追蹤應用程式視窗的更新。發生 TYPE_WINDOWS_CHANGED
事件時,請使用 getWindowChanges()
API 判斷視窗的變化方式。在多視窗模式更新期間,每個視窗都會產生一組專屬事件。getSource()
方法會傳回與每個事件關聯的視窗根層級檢視畫面。
如果某個應用程式為其 View
物件定義了無障礙窗格標題,當應用程式的使用者介面更新時,您的服務就可以識別。發生 TYPE_WINDOW_STATE_CHANGED
事件時,請使用 getContentChangeTypes()
傳回的型別,判斷視窗的變化情形。例如,架構可偵測窗格何時有新標題,或者窗格何時消失。
旋轉
為避免意外旋轉,我們新增了一種模式,即使裝置位置改變,也能固定目前的螢幕方向。使用者可以視需要按下系統資訊列中的按鈕,手動觸發旋轉。
在大多數情況下,應用程式的相容性影響很小。不過,如果您的應用程式有任何自訂的螢幕方向設定,或使用任何不尋常的螢幕方向設定,您可能會遇到之前未注意到的問題,因為使用者螢幕方向偏好設定一律設為直向。建議您查看應用程式所有主要活動的螢幕方向設定,確保這些設定仍能提供最佳體驗。
詳情請參閱相關的行為變更。

使用者可透過系統資訊列中的按鈕,在需要時手動觸發旋轉。
文字
Android 9 為平台帶來下列與文字相關的功能:
預先運算的文字:您可以使用
PrecomputedText
類別預先運算及快取所需資訊,提升文字算繪效能。此外,應用程式也能在主執行緒外執行文字版面配置。放大鏡:
Magnifier
類別是平台小工具,提供放大鏡 API,可在所有應用程式中提供一致的放大鏡功能體驗。智慧連結:Android 9 強化了
TextClassifier
類別,可運用機器學習技術識別所選文字中的部分實體,並建議相關動作。舉例來說,TextClassifier
可讓應用程式偵測到使用者已選取電話號碼。接著,應用程式可以建議使用者使用該號碼撥打電話。TextClassifier
中的功能會取代Linkify
類別的功能。文字版面配置:多種便利方法和屬性可讓您更輕鬆地實作 UI 設計。詳情請參閱
TextView
的參考說明文件。
ART 預先轉換 DEX 檔案
在搭載 Android 9 以上版本的裝置上,Android 執行階段 (ART) 預先編譯器會將應用程式套件中的 DEX 檔案轉換為更精簡的表示法,進一步最佳化壓縮的 Dalvik Executable 格式 (DEX) 檔案。這項異動可讓應用程式啟動速度更快,並減少磁碟空間和 RAM 的用量。
這項改善措施特別有助於磁碟 I/O 速度較慢的低階裝置。
裝置端系統追蹤
Android 9 可讓您從裝置記錄系統追蹤記錄,然後與開發團隊分享這些記錄的報表。這份報表支援多種格式,包括 HTML。
收集這些追蹤記錄後,您就能擷取與應用程式程序和執行緒相關的計時資料,並查看其他類型的全域重要裝置狀態。
如要進一步瞭解這項工具,請參閱「執行裝置端系統追蹤」。