改善刷新率

Android 15 會為遊戲設定預設的 60 Hz 刷新率,以便最佳化耗電量。如要解鎖更高的影格速率 (例如 120 FPS),您現在必須使用影格速率 API或 Swappy 程式庫明確要求。

不過,系統可能會根據電池電量或裝置溫度等因素,覆寫這項要求。雖然更高的更新率可提升視覺流暢度,但也會消耗更多電力並產生額外熱能。因此,請務必提供使用者選擇偏好更新率的選項,並仔細監控效能,確保使用者享有平衡的體驗。

使用 setFrameRate() API

setFrameRate() API 可讓遊戲開發人員使用特定的螢幕重新整理率。這項操作有兩個步驟:

  1. 確認裝置和 Android 版本的相容性。
  2. 使用 setFrameRate() 要求高 FPS。

確認裝置和 Android 版本相容性:

使用方法 Display.getSupportedModes(),判斷裝置是否支援 90 Hz、120 Hz 或其他刷新率。如果裝置的刷新率上限為 60Hz,就無法超過這個限制。

Kotlin

val display = windowManager.defaultDisplay
val supportedModes = display.supportedModes
for (mode in supportedModes) {
  Log.d("DisplayInfo", "Supported mode: ${mode.physicalWidth}x${mode.physicalHeight}, ${mode.refreshRate}Hz")
}

要求高 FPS

在算繪迴圈開始時、遊戲視窗初始化期間,或目標 FPS 需要變更顯示器更新率時,請叫用 setFrameRate()

即使您要求更高的刷新率,系統仍可能會將刷新率限制在 60Hz,原因是節電模式或熱節流等因素。如果遊戲的算繪效能未達到目標 FPS,要求更高的更新率可能會造成不必要的耗電,並提高裝置溫度。

以下程式碼片段示範如何使用 setFrameRate() API 避免過高的螢幕更新率。

Kotlin

val targetFps = 120f
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
  window.setFrameRate(
      targetFps,
      Window.FrameRateCompatibility.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,
      0
  )
}

如需進一步瞭解,請參閱「影格速率」頁面

使用 Frame Pacing 程式庫

影格放送速度程式庫 (或 Swappy) 是開放原始碼程式庫,旨在簡化 C/C++ Android 遊戲引擎中的 VSync 管理和影格排程。這項工具可簡化最佳化螢幕更新率的程序,有效地在 setFrameRate() 等功能上扮演較高層級的抽象層。此外,Swappy 還提供其他功能,可提升遊戲整體流暢度和效能。

Swappy 頁面提供更詳細的資訊。

其他最佳做法提示

以下幾個重點提示:

  1. 動態影格速率切換。
  2. Performance Monitoring。
  3. 根據螢幕的最高刷新率提供 FPS 選項。

動態影格速率切換

如要同時提升效能和耗電量,請考慮在遊戲中實作動態影格速率切換功能。這項技術可讓您在 120Hz 等高刷新率之間順暢切換,以便在需要大量運算的場景中提供更流暢的遊戲體驗,並在較不繁重的時刻或需要考量電池續航力或以 60 FPS 以下為目標時,使用 60Hz 等較低的刷新率。持續以 120Hz 的頻率運作可能會導致過度產生熱並快速耗電,進而導致使用者體驗不佳。您可以根據目前的算繪負載和裝置狀況,智能調整刷新率,以便在視覺保真度和電源效率之間取得平衡。

監控效能

為確保遊戲在更高的螢幕更新率下發揮最佳效能,請整合效能監控工具,例如影格計數器或效能重疊。這些工具會即時提供遊戲實際影格速率的意見回饋,讓您確認是否能持續達到 120 FPS 的目標。

如果影格速率大幅波動,請考慮在特定裝置上鎖定較低的達成率影格速率。這麼做可以提供更流暢的體驗,不會出現在追求最高更新率時可能發生的效能中斷情形。

根據螢幕的最高刷新率提供 FPS 選項

遊戲應偵測目前裝置支援的最高顯示刷新率,例如 60 Hz、90 Hz 或 120 Hz,並據此限制 FPS 設定。舉例來說,如果裝置只支援最高 60 Hz,建議您在遊戲設定中停用任何高於 60 FPS 的選項,以免造成玩家困惑。