在 Android Vitals 中,緩慢工作階段是指緩慢影格占比超過 25% 的工作階段。如果影格與前一個影格的間隔時間超過 50 毫秒 (相當於 20 FPS),就屬於緩慢影格。Android Vitals 也會回報第二個緩慢工作階段指標,目標為 34 毫秒 (相當於 30 FPS)。您可以透過緩慢工作階段,瞭解遊戲的影格率效能,這會影響使用者對遊戲流暢度的感受。
Play 會在適當情況下,開始減少顯示無法達到 20 FPS 的遊戲。請注意,遊戲執行一分鐘後,Android Vitals 才會開始監控影格率。
如要進一步瞭解這項指標,請造訪說明中心。

如何測量每秒影格數及偵測緩慢影格
Android dumpsys SurfaceFlinger --timestats 指令會提供平均每秒影格數,以及所有轉譯圖層的顯示到顯示時間長條圖。影格的「顯示到顯示」時間,是指目前影格與上一個影格繪製之間的時間間隔。請按照下列步驟,使用指令收集遊戲的每秒影格數:
執行指令並加上
enable和clear旗標,開始擷取資訊:adb shell dumpsys SurfaceFlinger --timestats -clear -enable遊戲執行時間夠長後,請再次執行指令,並加上
dump旗標,以傾印資訊:adb shell dumpsys SurfaceFlinger --timestats -dump傾印的資訊會提供 SurfaceFlinger 算繪的所有圖層的總影格數和
presentToPresent直方圖。您必須根據layerName篩選,找出遊戲所屬部分:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833您可以根據每個圖層的資訊,計算工作階段的緩慢影格率。
舉例來說,20 FPS 緩慢影格百分比 = (54 毫秒到 1000 毫秒的值總和) / totalFrames x 100
totalFrames = 274 ... presentToPresent histogram: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0傾印也會顯示每個圖層的平均每秒影格數:
... averageFPS = 30.179 ...收集完所有資訊後,請使用
disable旗標停用 timestats:adb shell dumpsys SurfaceFlinger --timestats -disable
緩慢影格的原因和解決方案
影格在螢幕上顯示或算繪的時間可能比目標長,原因有很多。遊戲可能受 CPU 或 GPU 限制、裝置可能過熱並啟動節流熱狀態,或遊戲影格速率與裝置螢幕刷新率不符。
使用 Android Frame Pacing (Swappy)、Vulkan 和 ADPF 解決這些問題,並提升遊戲效能。
什麼是 Swappy
Android Frame Pacing 程式庫 (又稱為 Swappy) 是 AGDK 程式庫的一部分。Swappy 可讓 OpenGL 和 Vulkan 遊戲在 Android 裝置上流暢地呈現畫面,並修正影格同步情形。
「影格同步」是指遊戲的邏輯和算繪迴圈,與 OS 螢幕子系統和基礎顯示硬體的同步處理程序。Android 螢幕子系統經過特別設計,可避免可能發生在顯示硬體切換至新影格途中的瑕疵 (又稱為「撕裂」) 情形。為了避免出現這類瑕疵,螢幕子系統會執行以下操作:
- 在內部為已通過的影格預留緩衝區。
- 偵測延遲提交的影格。
- 偵測到影格延遲時,重複顯示已通過的影格。
瞭解 Mir 2 如何使用 Swappy 將緩慢工作階段比率從 40% 降至 10%。
如何在原生專案中使用 Swappy
請參閱下列指南,將 Android Frame Pacing 程式庫整合至遊戲中:
如何在 Unity 遊戲引擎中使用 Swappy
Unity 已將 Android Frame Pacing 整合至引擎中。如要在 Unity 2019.2 以上版本中啟用這項功能,請依序前往「專案設定」>「Player」>「Settings」,然後在「Android」>「Resolution and Presentation」下方,勾選「Optimized Frame Pacing」核取方塊:

或者,您也可以在邏輯程式碼中,透過程式啟用最佳化影格同步速度選項,讓 Unity 平均分配影格,減少影格率差異,打造更流暢的遊戲體驗。
如何在 Unreal 遊戲引擎中使用 Swappy
Unreal 4.25 以上版本整合了 Android Frame Pacing 程式庫 (屬於 Android Game Development Kit 的一部分)。行動影格同步文章說明如何啟用 Android Frame Pacing 程式庫,以及如何透過 C++ 程式碼控制影格同步。
什麼是 Vulkan
Vulkan 是新型的跨平台 3D 圖形 API,旨在盡可能減少裝置圖形處理硬體與遊戲間的抽象化情形。Vulkan 是 Android 的主要低階圖形 API,可取代 OpenGL ES。Android 仍支援 OpenGL ES,但我們不再積極開發相關功能。
與 OpenGL ES 相較,Vulkan 具有下列優點:
- 更有效率的架構,圖形驅動程式的 CPU 負擔較小
- 全新的最佳化策略,可提升 CPU 效能
- OpenGL ES 未提供的全新圖形處理功能,例如無繫結 API 和光線追蹤
如何在原生 Android 專案中使用 Vulkan
「開始在 Android 上使用 Vulkan」程式碼實驗室會引導您設定 Vulkan 算繪管道,然後在畫面上算繪帶有紋理的旋轉三角形。請參閱程式碼實驗室,瞭解如何算繪遊戲圖像。
如何在 Unity 遊戲引擎中使用 Vulkan
如要在 Unity 上啟用自動選取裝置功能,請按照步驟設定 Auto Graphics API。
或者,您也可以手動啟用 Vulkan,方法是停用「Auto Graphics API」,並將 Vulkan 設為「Graphics APIs」清單中的最高優先順序。如果您使用的是 Unity 2021.1 或更早版本,這是使用 Vulkan 的唯一方法。
使用 VkQuality Unity 引擎外掛程式,在啟動時為遊戲提供圖形 API 建議,以便在特定裝置上使用。
如何在 Unreal 遊戲引擎中使用 Vulkan
如要啟用 Vulkan 圖形 API,請依序前往「專案設定」>「Platforms」>「Android」>「Build」,然後選取「Support Vulkan」。如果同時選取「Support Vulkan」和「Support OpenGL ES3.2」,Unreal 預設會使用 Vulkan。如果裝置不支援 Vulkan,Unreal 會改用 OpenGL ES 3.2。
如果您使用的特定 Vulkan 功能在某些裝置上運作不佳,可以自訂 BaseDeviceProfile.ini 檔案,排除這些裝置。如要瞭解如何自訂 BaseDeviceProfile.ini,請參閱「自訂 Android 裝置設定檔和擴充性」。由於新的裝置驅動程式可能會修正先前已知的錯誤裝置,因此請更新 BaseDeviceProfile.ini 檔案,以取得所有最佳化功能。
什麼是 ADPF
Android 動態效能架構 (ADPF) 會根據 Android 的動態熱能、CPU 和 GPU 管理功能,對遊戲進行最佳化調整。本文說明重點在於遊戲,但您也可以將這些功能用於其他耗用大量效能的應用程式。
ADPF 是一組 API,可讓遊戲和需要耗用大量效能執行的應用程式直接與 Android 裝置的電力和熱溫系統互動。這些 API 可讓您監控 Android 系統的動態行為,並在不會使裝置過熱的永續等級最佳化遊戲效能。
以下是 ADPF 的主要功能:
- Thermal API:監控裝置的溫度狀態,讓應用程式在無法維持永續等級前主動調整工作負載。
- CPU Performance Hint API:提供效能提示,讓 Android 根據工作負載選擇合適的效能設定 (例如 CPU 運作點或核心)。
- Game Mode API 和 Game State API:根據使用者設定和遊戲專屬設定,優先調整效能或電池續航力特性,提升遊戲體驗。
- 固定效能模式:在基準化期間為裝置啟用固定效能模式,以取得非由動態 CPU 時脈變更的測量數據。
- 省電模式:向工作階段指出,效能提示工作階段中的執行緒可以安全地排程,優先考量省電而非效能。適用於 Android 15 (API 級別 35)。
如何在原生 Android 專案中使用 ADPF
在原生遊戲中整合適應性功能程式碼實驗室會引導您將 ADPF 功能整合至遊戲,您可以按照自己的步調完成步驟。完成程式碼實驗室後,您將整合下列功能:
- Thermal API:監聽裝置溫度,並在裝置進入溫度調節狀態前做出反應。
- Game Mode API:瞭解玩家的最佳化偏好設定 (最大化效能或節省電池用量),並據此調整。
- Game State API:讓系統瞭解遊戲狀態 (載入、遊玩、UI 等),系統就能據此調整資源 (提升 I/O、CPU、GPU 等)。
- Performance Hint API:讓系統瞭解執行緒模型和工作負載,以便分配資源。
如何在 Unity 遊戲引擎中使用 ADPF
Unity 的 Adaptive Performance 是一款工具,可協助遊戲開發人員在行動裝置上最佳化遊戲,特別是針對多元的 Android 生態系統。Adaptive Performance 可讓遊戲即時適應裝置的效能和散熱特性,確保遊戲體驗流暢高效。
Adaptive Performance Android provider 會引導您在 Unity 中導入 ADPF。另請參閱「ADPF Unity Adaptive Performance 和 Android 供應商」。
如何在 Unreal 遊戲引擎中使用 ADPF
Unreal Engine 的 Android 動態效能框架 (ADPF) 外掛程式可提供穩定的效能,並防止熱溫調節。從 GitHub 下載外掛程式。這個外掛程式會設定 Unreal 控制台值來變更功能。詳情請參閱「ADPF Unreal Engine 外掛程式」。