Android 15 为游戏设置了默认的 60Hz 刷新率以优化功耗。要解锁 120 FPS 等更高的帧率,您现在必须使用 Frame Rate API 或 Swappy 库明确请求。
但是,系统可能会根据电池电量或设备温度等因素覆盖此请求。虽然更高的刷新率能提升视觉流畅度,但它们也需要更多功耗并产生额外的热量。因此,为用户提供选择其偏好刷新率的选项并仔细监控性能以确保均衡的用户体验至关重要。
使用 setFrameRate()
API
setFrameRate()
API 允许游戏开发者使用特定的显示刷新率。实现此功能分为两个步骤:
- 验证设备和 Android 版本兼容性。
- 使用
setFrameRate()
请求高帧率。
验证设备和 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")
}
请求高帧率
在渲染循环开始时、游戏窗口初始化期间,或当目标帧率需要更改显示刷新率时,调用 setFrameRate()
。
即使您请求更高的刷新率,系统仍可能因省电模式或散热限制等因素将刷新率限制在 60Hz。如果您的游戏渲染性能未能达到目标帧率,请求更高的刷新率可能会导致不必要的功耗,并增加设备温度。
以下代码段演示了如何使用 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 页面提供了更详细的信息。
获取最佳效果的额外提示
以下部分列出了几项重要提示
- 动态帧率切换。
- 性能监控。
- 根据最大显示刷新率提供帧率选项。
动态帧率切换
为优化性能和功耗,请考虑在游戏中实现动态帧率切换。这项技术可让您在要求苛刻的场景中无缝切换到 120Hz 等更高刷新率,以获得更流畅的游戏体验;而在不太密集的时刻,或当电池续航是问题时,或目标帧率低于 60FPS 时,则切换到 60Hz 等较低刷新率。持续以 120Hz 运行可能导致过度发热和电池快速耗尽,从而可能导致负面用户体验。通过根据当前渲染负载和设备状况智能调整刷新率,您可以在视觉保真度和能效之间取得平衡。
性能监控
为确保您的游戏在更高刷新率下表现最佳,请集成帧计数器或性能叠加层等性能监控工具。这些工具可提供游戏实际帧率的实时反馈,让您验证是否始终能达到目标 120 FPS。
如果您的帧率波动较大,请考虑在给定设备上以较低的可实现帧率作为目标。这可以提供更流畅的体验,而不会出现争取最高刷新率时可能发生的性能问题。
根据最大显示刷新率提供帧率选项
您的游戏应检测当前设备支持的最大显示刷新率,例如 60Hz、90Hz 或 120Hz,并相应地限制帧率设置。例如,如果设备仅支持最高 60Hz,则建议在游戏设置中禁用高于 60FPS 的任何选项,以避免让玩家感到困惑。