Android 15 为游戏设置了默认的 60Hz 刷新率,以优化功耗。现在,如需解锁更高的帧速率(例如 120 FPS),您必须使用 Frame Rate 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 的所有选项,以免让玩家感到困惑。