Android 9 (API 級別 28) 推出了強大的新功能, 包括使用者和開發人員本文件將重點介紹開發人員適用的新功能,
如要瞭解新的 API,請參閱 API 差異比較表或前往 Android API 參考資料。此外,請務必查看 Android 9 行為變更,瞭解平台變更可能對應用程式造成的影響。
使用 Wi-Fi RTT 調整室內定位

Android 9 支援 IEEE 802.11-2016 Wi-Fi 的平台 通訊協定,也稱為 Wi-Fi 封包往返時間 (RTT), 室內定位
在搭載 Android 9 且硬體支援的裝置上,應用程式可使用
RTT API:
與附近支援 RTT 功能的 Wi-Fi 存取點 (AP) 之間的距離。裝置必須
已啟用定位服務,並且開啟 Wi-Fi 掃描功能 (位於下方)
設定 >位置),且應用程式必須具有
ACCESS_FINE_LOCATION
權限。裝置不必連線到存取點即可使用即時文字訊息。
為維護隱私,只有手機能夠判斷距離
存取點;存取點就無法提供這項資訊。
如果裝置測量到 3 個以上存取點的距離,您可以使用多邊測量演算法,估算最符合這些測量值的裝置位置。測量結果通常在 1 到 2 公尺以內。
這樣您就能建構新的體驗,例如建構導航 和精細的適地性服務,例如消弭語音控制 (例如「打開這燈」) 和所在位置資訊 (例如 「這項產品有特價優惠嗎?」)。
請參閱 Android WifiRttScan 示範應用程式中使用的 WiFi RTT API。
詳情請參閱「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 的任何裝置或模擬器上模擬螢幕凹口 如下所示:
- 啟用開發人員選項。
- 在「開發人員選項」畫面中,向下捲動至「Drawing」部分,然後選取「Simulate a display with a cutout」。
- 選取凹口大小。
通知
Android 9 針對通知推出了多項強化功能,開發人員只要指定 API 級別 28 以上版本,就能使用這些功能。

附加相片的 MessagingStyle。

MessagingStyle 包含回覆和對話。
如需使用通知的程式碼範例 (包括 Android 9 功能),請參閱 人物 範例。
強化訊息服務體驗
從 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()
敬上 方法可讓你為動作提供語意含義 「標示為已讀」「刪除」、「回覆」依此類推SmartReply: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,可支援以螢幕為基礎的閃光燈,並存取 OIS 時間戳記,以便在應用程式層級提供圖像穩定功能和特效。
在 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
可讓你建立
Drawable
或
從位元組緩衝區、檔案擷取 Bitmap
或是 URI如要將圖片解碼,請先呼叫
createSource()
敬上
改為已編碼圖片的來源。接著,呼叫
decodeDrawable()
敬上
或 decodeBitmap()
方法是傳遞 ImageDecoder.Source
建立 Drawable
的物件
或 Bitmap
。如要變更
預設設定,將 OnHeaderDecodedListener
傳遞給
decodeDrawable()
或 decodeBitmap()
。ImageDecoder
次通話
onHeaderDecoded()
圖片的預設寬度和高度 (如果已知)。
如果編碼的圖片是 GIF 或 WebP,decodeDrawable()
會傳回
Drawable
是
AnimatedImageDrawable
類別
您可以使用不同的方法設定圖片屬性:
- 如要將已解碼的圖片調整為特定大小,請將目標尺寸傳遞至
setTargetSize()
。 您也可以使用樣本大小縮放圖片。將樣本大小直接傳遞至setTargetSampleSize()
。 - 如要裁剪縮放圖片的範圍內圖片,請呼叫
setCrop()
。 - 如要建立可變動的點陣圖,請將
true
傳遞至setMutableRequired()
。
ImageDecoder
也能讓你為圖片加上自訂的複雜效果
例如圓角或
圓形遮罩。使用 setPostProcessor()
搭配 PostProcessor
類別的例項,執行您想要的任何繪圖指令。
動畫
Android 9 導入了
AnimatedImageDrawable
敬上
類別,用於繪圖及顯示 GIF 和 WebP 動畫圖片。
AnimatedImageDrawable
的運作方式與 AnimatedVectorDrawable
類似,即轉譯執行緒會驅動 AnimatedImageDrawable
的動畫。轉譯執行緒也會使用 worker 執行緒進行解碼,以免解碼作業干擾轉譯執行緒的其他作業。這個實作方式可讓應用程式顯示動畫圖片,而無須管理更新作業或干擾應用程式 UI 執行緒上的其他事件。
您可以使用 ImageDecoder
的例項解碼 AnimatedImageDrawable
。下列
程式碼片段說明如何使用 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 圖片壓縮和 Media API
Android 9 內建支援高動態範圍 (HDR) VP9 Profile 2。 可讓您在 YouTube、Play 電影、 和其他來源。
Android 9 還支援使用「高效率圖片」編碼圖片
檔案格式 (HEIF
也就是 HEIC,可提高壓縮率並減少儲存空間和網路數據
。MediaMuxer
和 MediaExtractor
類別支援 HEIF 靜態圖片樣本。有了 Android 9 裝置的平台支援,您就能輕鬆從後端伺服器傳送及使用 HEIF 圖片。確認應用程式支援此資料格式 (用於分享和顯示) 後,請嘗試在應用程式中使用 HEIF 做為圖片儲存格式。您可以使用 ImageDecoder
或 BitmapFactory
(可從 JPEG 檔案取得位圖) 進行 JPEG 轉換為 HEIF 的作業。接著,您可以使用 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
可正常運作。工作執行時
請務必使用 Network
物件
傳回者:
JobParameters.getNetwork()
。
否則將直接使用裝置的預設網路
可能不符合您的需求,因而導致意外使用資料。
Neural Networks API 1.1
Neural Networks API 已在 Android 8.1 (API 級別 27) 中推出,可加快 Android 裝置端機器學習速度。Android 9 擴充及改善 API,新增 支援九種全新作業:
- 元素層級數學運算:
- 陣列運算:
已知問題:通過
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
提供給
ANEURALNETWORKS_PAD
以及 Android 9.0 以上版本支援此功能
NNAPI 的輸出內容可能會與高階機器的輸出內容不一致
學習架構
TensorFlow Lite。您應改為僅傳遞 ANEURALNETWORKS_TENSOR_FLOAT32
,直到問題解決為止。
此外,這個 API 也會引進一個新函式
ANeuralNetworksModel_relaxComputationFloat32toFloat16()
、
讓您指定是否要
ANEURALNETWORKS_TENSOR_FLOAT32
其範圍和精確度相當於 IEEE 754 16 位元浮點的範圍
格式。
自動填入架構
Android 9 推出了多項自動填入功能 以便在填寫時導入 表單。如要進一步瞭解如何在應用程式中使用自動填入功能,請參閱「自動填入架構」指南。
安全性增強項目
Android 9 推出多項安全性功能,以下各節將做個簡要說明:
Android 保護確認
搭載 Android 9 以上版本的支援裝置可取得 可使用 Android 保護確認機制使用這項工作流程時 應用程式顯示提示,請使用者核准簡短的聲明。 這項聲明可讓應用程式再次確認使用者想要完成機密交易,例如付款。
如果使用者接受聲明,Android KeyStore 就會收到並儲存
受金鑰雜湊訊息驗證保護的加密編譯簽章
驗證碼 (HMAC)。Android KeyStore 確認訊息有效後,您的應用程式
可以在信任節點中使用從 trustedConfirmationRequired
產生的金鑰
執行環境 (TEE) 簽署使用者已接受的訊息。該簽章有極高可信度,表示使用者已看過且同意該聲明。
注意:Android 保護確認機制不會為使用者提供安全資訊管道。除了 Android 平台提供的保證外,應用程式不得假設其他機密保證。請特別注意,勿利用此工作流程,顯示通常不會出現在使用者裝置上的機密資訊。
如要瞭解如何新增 Android 保護確認機制的支援功能,請參閱 Android 保護 確認 指南。
統一生物特徵辨識驗證對話方塊
在 Android 9 中,系統會代表您的應用程式提供生物特徵辨識驗證對話方塊。這項功能會為對話方塊建立標準化的外觀、感受和位置,讓使用者更放心,知道自己正在透過可信賴的生物特徵辨識憑證檢查器進行驗證。
如果應用程式使用
FingerprintManager
敬上
如要向使用者顯示指紋驗證對話方塊,請切換為
BiometricPrompt
。BiometricPrompt
會依賴系統顯示驗證對話方塊。並且會根據使用者選擇的生物特徵辨識驗證類型調整行為。
硬體安全性模組
搭載 Android 9 以上版本的支援裝置 具有 StrongBox Keymaster,這是 Keymaster HAL 的實作內容, 皆位於硬體安全性模組中模組包含以下內容:
- 專屬 CPU。
- 安全的儲存空間
- 真正的隨機號碼產生器。
- 防止套件遭到竄改和未經授權側載的其他機制 應用程式
檢查儲存在 StrongBox Keymaster 中的金鑰時,系統會確認 金鑰與受信任的執行環境 (TEE) 的完整性。
如要進一步瞭解如何使用 Strongbox Keymaster,請參閱硬體安全性 Module。
將安全金鑰匯入 KeyStore
Android 9 新增了額外的金鑰解密安全性, 能夠使用 ASN.1 編碼金鑰格式。接著,Keymaster 會解密該資料集內的金鑰 由於 KeyStore,因此金鑰內容一律不會在裝置主機記憶體中顯示為明文。
進一步瞭解如何匯入加密金鑰 。
採用金鑰輪替的 APK 簽名方案
Android 9 新增 APK Signature Scheme v3 支援。這項配置提供 在每個簽署區塊的簽署區塊中,加入輪替證明 憑證這項功能可讓您的應用程式以新的簽署方式簽署 將 APK 檔案過去的簽署憑證與 現在已簽署
進一步瞭解如何透過
apksigner
。
僅在解鎖的裝置上允許金鑰解密的選項
Android 9 推出 unlockedDeviceRequired
標記。這個選項會決定
是否需要解鎖螢幕才能允許 KeyStore
使用指定的金鑰解密任何傳輸中或儲存的資料。這些類型
的金鑰最適合加密要儲存在磁碟上的機密資料,例如
健康或企業資料這個標記可讓使用者較保證
手機處於鎖定狀態時,無法解密資料
遭竊或遭竊
如要在裝置鎖定時保護金鑰免於解密,請啟用旗標
方法是將 true
傳遞至 setUnlockedDeviceRequired()
方法。完成這個步驟後,使用者的螢幕鎖定時,
嘗試使用這組金鑰解密或簽署資料失敗。使用者必須輸入 PIN 碼、密碼、指紋或其他信任因素,才能存取鎖定的裝置。
舊版加密支援
搭載 Keymaster 4 的 Android 9 裝置支援 Triple Data Encryption Algorithm (3DES)。如果您的應用程式與舊版服務相容 如果是需要 3DES 的系統,請使用這類型的加密機制 私密憑證
如要進一步瞭解如何提高應用程式的安全性,請參閱「Android 開發人員的安全性」一文。
淘汰 WPS
基於安全考量,Wi-Fi 保護設定 (WPS) 已淘汰。
Android 備份
Android 9 新增了與備份和還原相關的新功能和開發人員選項。異動詳情如下: 專區。
用戶端加密備份
Android 9 現在支援使用 用戶端密鑰。在下列情況下,這項支援功能會自動啟用 條件相符:
- 使用者已在 Android 9 以上版本中啟用備份功能。
- 使用者設定了螢幕 裝置鎖定 要求解鎖 PIN 碼、解鎖圖案或密碼才能解鎖
啟用這項隱私保護措施後,系統就會停用裝置的 PIN 碼、解鎖圖案或密碼 才能從使用者裝置建立的備份還原資料。學習 如要進一步瞭解這項功能採用的技術,請參閱 Google Cloud Key Vault 服務白皮書。
定義備份所需的裝置條件
如果您的應用程式資料包含機密資訊或偏好設定,Android 9 可讓您定義 條件 應用程式資料會包含在使用者的備份中,例如用戶端位於 已啟用加密功能,或正在進行裝置之間的資料轉移。
如要進一步瞭解如何備份 Android 裝置上的資料,請參閱「資料備份總覽」。
無障礙設定
Android 9 導入了無障礙功能的強化項目 以便更輕鬆地為
導覽語意
在 Android 9 中新增的屬性可讓您更輕鬆地定義無障礙服務 (尤其是螢幕閱讀器) 如何在螢幕上從一個部分導覽至另一部分。這些屬性可協助視障使用者 快速切換應用程式 UI 中的文字 並讓使用者做出選擇
舉例來說,在購物應用程式中,螢幕閱讀器可協助使用者進行操作 直接跳到下一個交易類別, 不必使用螢幕閱讀器 必須先閱讀特定類別中的所有項目 才能繼續進行下一步
無障礙窗格標題
在 Android 8.1 (API 級別 27) 以下版本中,無障礙服務無法隨時判斷螢幕的特定窗格何時更新,例如活動將一個區塊取代為另一個區塊時。窗格包含 邏輯群組,視覺相關的 UI 元素,通常構成 片段。
在 Android 9 中,您可以為這些窗格提供無障礙窗格標題,或個別可辨識的標題。如果窗格有無障礙窗格標題, 窗格變更時,無障礙服務會收到更詳細的資訊。 這項功能可讓服務向使用者提供更精細的資訊,說明 UI 中發生的變更。
如要指定窗格的標題,請使用
android:accessibilityPaneTitle
敬上
屬性。您也可以更新 UI 窗格的標題,會取代為
setAccessibilityPaneTitle()
。
舉例來說,您可以為
Fragment
物件。
以標題為基礎的導覽
如果應用程式顯示包含邏輯標題的文字內容,請針對代表這些標題的 View
例項,將 android:accessibilityHeading
屬性設為 true
。變更者:
新增這些標題,即可允許無障礙服務協助使用者瀏覽內容
直接從一個標題指向下一個標題任何無障礙服務都可以使用這項功能,改善使用者的 UI 導覽體驗。
群組導覽和輸出
螢幕閱讀器通常採用
android:focusable
屬性
判斷何時應該
ViewGroup
,或一組集合
View
物件,做為單一單位。如此一來
能讓使用者知道,觀看次數在邏輯上彼此相關。
在 Android 8.1 以下版本中,您需要將 ViewGroup
中的每個 View
物件標示為不可聚焦,並將 ViewGroup
本身標示為可聚焦。這個
排列方式造成部分 View
例項遭標示為可聚焦
讓鍵盤導覽變得更加麻煩。
從 Android 9 開始,您可以使用
android:screenReaderFocusable
敬上
屬性,而非 android:focusable
屬性
將 View
物件設為可聚焦物件會產生不良結果螢幕閱讀器會將焦點放在將 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 的平台小工具,讓 所有應用程式的放大鏡功能使用體驗。智慧 Linkify:Android 9 強化了
TextClassifier
類別,可利用機器學習技術,辨識所選文字中的部分實體,並建議動作。舉例來說,TextClassifier
可讓應用程式偵測 使用者已選取電話號碼接著,應用程式就能建議使用者使用該號碼撥打電話。TextClassifier
中的功能會取代Linkify
類別的功能。文字版面配置:提供多種方便的方程式和屬性,讓您更輕鬆地實作 UI 設計。詳情請參閱
TextView
的參考說明文件。
ART 的 DEX 檔案提前轉換功能
在搭載 Android 9 以上版本的裝置上,Android 執行階段 (ART) 預先編譯器會將應用程式套件中的 DEX 檔案轉換為更精簡的表示法,進一步最佳化壓縮的 Dalvik 執行檔格式 (DEX) 檔案。這項異動可讓應用程式啟動速度加快,並減少磁碟空間和 RAM 的耗用量。
這項改善措施特別適用於磁碟 I/O 速度較慢的低階裝置 速度。
裝置端系統追蹤
Android 9 可讓您從裝置記錄系統追蹤記錄,然後與開發團隊分享這些記錄的報表。這份報表支援多種格式,包括 HTML。
收集這些追蹤記錄後,您就能擷取與應用程式程序和執行緒相關的時間資料,並查看其他類型的全球重要裝置狀態。
如要進一步瞭解這項工具,請參閱「在裝置端系統上執行」 追蹤記錄。