Android 15 为游戏设置了默认的 60Hz 刷新频率,以优化 功耗。如需解锁更高的帧速率(例如 120 FPS),您现在必须 使用 帧速率 API 或 Swappy 库显式请求这些帧速率。
不过,系统可能会根据电池电量或设备温度等因素替换此请求。虽然较高的刷新频率可以提高视觉流畅度,但也会消耗更多电量并产生更多热量。因此,务必为用户提供选择首选刷新频率的选项,并仔细监控性能,以确保用户体验平衡。
使用 setFrameRate() API
借助 setFrameRate() API,游戏开发者可以使用特定的显示屏
刷新频率。为此,您需要执行以下两个步骤:
- 验证设备和 Android 版本的兼容性。
- 使用
setFrameRate()请求高 FPS。
验证设备和 Android 版本的兼容性:
使用方法 Display.getSupportedModes() 确定设备
是否支持 90Hz、120Hz 或其他刷新频率。如果设备仅支持 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
)
}
使用帧同步库
帧同步库(或 Swappy)是一个开源库,旨在
简化 C/C++ Android 游戏
引擎中的 VSync 管理和帧调度。
此工具简化了优化刷新频率的过程,有效地
充当了
setFrameRate()等功能之上的更高级别抽象层。此外,Swappy 还提供了其他功能,可以提升游戏的整体流畅度和性能。
如需了解更多详细信息,请参阅 Swappy 页面。
其他提示:为了达到最佳效果
以下部分列出了几个重要提示:
- 动态帧速率切换。
- 性能监控。
- 根据最大显示屏刷新频率提供 FPS 选项。
动态帧速率切换
如需同时优化性能和功耗,请考虑在游戏中实现动态帧速率切换。借助此技术,您可以在高要求的场景中无缝切换到更高的刷新率(例如 120Hz),以获得更流畅的游戏体验;而在要求较低的场景中或在电池续航时间是一个问题或目标低于 60FPS 时,则切换到较低的刷新率(例如 60Hz)。以 120Hz 的频率持续运行可能会导致过多的 热量产生和电池耗电过快,从而可能导致 负面的用户体验。通过根据当前的渲染负载和设备状况智能调整刷新率,您可以在视觉保真度和 电源效率之间取得平衡。
性能监控
为了确保游戏以更高的刷新频率实现最佳性能,请集成性能监控工具,例如帧计数器或性能叠加层。 这些工具可提供有关游戏实际帧速率的实时反馈,让您可以验证是否始终达到目标 120 FPS。
如果帧速率波动很大,请考虑在给定设备上以较低的可实现帧速率为目标。这样可以提供更流畅的体验,而不会出现努力实现最高刷新频率时可能发生的性能问题。
根据最大显示屏刷新频率提供 FPS 选项
您的游戏应检测当前设备支持的最大显示刷新率(例如 60Hz、90Hz 或 120Hz),并相应地限制 FPS 设置。例如,如果设备仅支持最高 60Hz,建议在游戏设置中停用任何高于 60FPS 的选项,以避免让玩家感到困惑。