Android 15는 전원 소모를 최적화하기 위해 게임의 기본 화면 재생 빈도를 60Hz로 설정합니다. 120FPS와 같은 더 높은 프레임 속도를 사용하려면 이제 Frame Rate API 또는 Swappy 라이브러리를 사용하여 이를 명시적으로 요청해야 합니다.
하지만 시스템은 배터리 수준이나 기기 온도와 같은 요인에 따라 이 요청을 재정의할 수 있습니다. 화면 재생 빈도가 높을수록 시각적 부드러움이 향상되지만 전력 소모량이 증가하고 열이 더 발생합니다. 따라서 사용자에게 원하는 새로고침 레이트를 선택할 수 있는 옵션을 제공하고 균형 잡힌 사용자 환경을 보장하기 위해 성능을 주의 깊게 모니터링하는 것이 중요합니다.
렌더링 루프가 시작될 때, 게임 창 초기화 중에 또는 타겟 FPS가 디스플레이 새로고침 빈도를 변경해야 할 때 setFrameRate()를 호출합니다.
더 높은 비율을 요청하더라도 절전 모드나 열 제한과 같은 요인으로 인해 시스템에서 화면 재생 빈도를 60Hz로 제한할 수 있습니다. 게임의 렌더링 성능이 타겟 FPS에 도달하지 못하는 경우 더 높은 새로고침 빈도를 요청하면 불필요한 전력이 소모되고 기기의 온도가 올라갈 수 있습니다.
다음 스니펫은 setFrameRate() API를 사용하여 너무 높은 새로고침 빈도를 방지하는 방법을 보여줍니다.
프레임 속도 라이브러리(Swappy)는 C/C++ Android 게임 엔진에서 VSync 관리 및 프레임 예약을 간소화하도록 설계된 오픈소스 라이브러리입니다.
이 도구는 새로고침 빈도 최적화 프로세스를 간소화하여 setFrameRate()와 같은 기능에 대해 상위 수준의 추상화 레이어 역할을 합니다. 또한 Swappy는 게임의 전반적인 부드러움과 성능을 개선할 수 있는 추가 기능을 제공합니다.
성능과 전원 소모량을 모두 최적화하려면 게임에 동적 프레임 속도 전환을 구현하는 것이 좋습니다. 이 기법을 사용하면 까다로운 장면에서 더 부드러운 게임플레이를 위해 120Hz와 같은 더 높은 화면 재생 빈도와 덜 까다로운 순간이나 배터리 수명이 우려되거나 60FPS 미만을 타겟팅하는 경우 60Hz와 같은 더 낮은 화면 재생 빈도 간에 원활하게 전환할 수 있습니다.
120Hz로 지속적으로 실행하면 과도한 열 발생과 빠른 배터리 소모가 발생하여 사용자 환경이 저하될 수 있습니다. 현재 렌더링 부하와 기기 상태에 따라 화면 재생 빈도를 지능적으로 조정하면 시각적 충실도와 전력 효율성의 균형을 맞출 수 있습니다.
성능 모니터링
더 높은 재생 빈도에서 게임이 최적으로 실행되도록 하려면 프레임 카운터나 성능 오버레이와 같은 성능 모니터링 도구를 통합하세요.
이러한 도구는 게임의 실제 프레임 속도에 관한 실시간 피드백을 제공하므로 타겟 120FPS를 일관되게 달성하고 있는지 확인할 수 있습니다.
프레임 속도가 크게 변동되는 경우 지정된 기기에서 달성 가능한 더 낮은 프레임 속도를 타겟팅하는 것이 좋습니다. 이렇게 하면 최대 재생 빈도를 달성할 때 발생할 수 있는 성능 중단 없이 더 원활한 환경을 제공할 수 있습니다.
최대 디스플레이 새로고침 빈도에 따라 FPS 옵션 제공
게임은 현재 기기에서 지원하는 최대 디스플레이 재생 빈도(예: 60Hz, 90Hz, 120Hz)를 감지하고 그에 따라 FPS 설정을 제한해야 합니다. 예를 들어 기기가 최대 60Hz만 지원하는 경우 플레이어의 혼동을 피하기 위해 게임 설정에서 60FPS보다 높은 옵션을 사용 중지하는 것이 좋습니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Optimize refresh rates\n\n[Android 15](/about/versions/15) sets a default 60Hz refresh rate for games to optimize\npower consumption. To unlock higher frame rates like 120 FPS, you must now\nexplicitly request them using the [Frame Rate API](/media/optimize/performance/frame-rate) or the Swappy\nlibrary.\n\nHowever, the system may override this request based on factors like battery\nlevel or device temperature. While higher refresh rates enhance visual\nsmoothness, they also demand more power and generate additional heat. Therefore,\nit's crucial to offer users the option to choose their preferred refresh rate\nand carefully monitor performance to ensure a balanced user experience.\n\nUse the [`setFrameRate()`](/reference/android/view/Surface#setFrameRate(float,%20int)) API\n------------------------------------------------------------------------------------------\n\nThe [`setFrameRate()`](/reference/android/view/Surface#setFrameRate(float,%20int)) API allows the game devs to use a specific display\nrefresh rate. There are two steps to doing this:\n\n1. Verify device and Android version compatibility.\n2. Request high FPS using [`setFrameRate()`](/reference/android/view/Surface#setFrameRate(float,%20int)).\n\n### Verify Device and Android Version Compatibility:\n\nUse methods [`Display.getSupportedModes()`](/reference/android/view/Display#getSupportedModes()) to determine if the device\nsupports 90Hz, 120Hz, or other refresh rates. If the device is limited to 60Hz,\nit is not possible to exceed this limit. \n\n### Kotlin\n\n val display = windowManager.defaultDisplay\n val supportedModes = display.supportedModes\n for (mode in supportedModes) {\n Log.d(\"DisplayInfo\", \"Supported mode: ${mode.physicalWidth}x${mode.physicalHeight}, ${mode.refreshRate}Hz\")\n }\n\n### Request High FPS\n\nInvoke [`setFrameRate()`](/reference/android/view/Surface#setFrameRate(float,%20int)) when your rendering loop starts, during game window\ninitialization, or when the target FPS needs to change the display refresh rate.\n\nEven if you request a higher rate, the system might still limit the refresh rate\nto 60Hz due to factors like power saving mode or thermal throttling. If your\ngame's rendering performance doesn't reach the target FPS, requesting higher\nrefresh rate may consume unnecessary power consumption and increase the device's\ntemperature.\n\nThe following snippet demonstrates how to avoid an overly high refresh rate with\nthe `setFrameRate()` API. \n\n### Kotlin\n\n val targetFps = 120f\n if (Build.VERSION.SDK_INT \u003e= Build.VERSION_CODES.R) {\n window.setFrameRate(\n targetFps,\n Window.FrameRateCompatibility.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,\n 0\n )\n }\n\n[The Framerate page](/media/optimize/performance/frame-rate) provides more detailed information for further reading.\n\nUse Frame pacing library\n------------------------\n\n[The frame pacing library](/media/optimize/performance/frame-rate), or Swappy, is an open-source library designed to\nsimplify [VSync](https://en.wikipedia.org/wiki/Vertical_blanking_interval) management and frame scheduling in C/C++ Android game\nengines.\nThis tool streamlines the process of optimizing refresh rates, effectively\nacting as a higher-level abstraction layer over functionalities like\n[`setFrameRate()`](/reference/android/view/Surface#setFrameRate(float,%20int)). Furthermore, Swappy provides additional features that can\nenhance your game's overall smoothness and performance.\n\n[The Swappy page](/media/optimize/performance/frame-rate) gives more detailed information.\n\nAdditional Tips for Best Results\n--------------------------------\n\nThe following section lay out several top tips:\n\n1. Dynamic Frame Rate Switching.\n2. Performance Monitoring.\n3. Provide FPS options based on maximum display refresh rate.\n\n### Dynamic Frame Rate Switching\n\nTo optimize both performance and power consumption, consider implementing\ndynamic frame rate switching in your game. This technique lets you\nseamlessly transition between higher refresh rates like 120Hz for smoother\ngameplay during demanding scenes, and lower rates like 60Hz during less\nintensive moments or when battery life is a concern or targeting under 60FPS.\nConstantly running at 120Hz can lead to excessive\n[heat generation](/games/optimize/adpf/thermal) and rapid battery drain, potentially resulting in a\nnegative user experience. By intelligently adjusting the refresh rate based on\nthe current rendering load and device conditions, you can strike a balance\nbetween visual fidelity and [power efficiency](/games/optimize/power).\n\n### Performance Monitoring\n\nTo ensure your game performs optimally at higher refresh rates, integrate\nperformance monitoring tools such as a frame counter or performance overlay.\nThese tools provide real-time feedback on your game's actual frame rate,\nallowing you to verify whether you're consistently achieving the target 120\nFPS.\n\nIf your frame rate fluctuates significantly, consider targeting a lower\nachievable framerate on the given device. This can deliver a smoother experience\nwithout the performance hiccups that might occur when striving for the highest\nrefresh rate.\n\n### Provide FPS options based on maximum display refresh rate\n\nYour game should detect the maximum display refresh rate supported by the\ncurrent device, such as 60Hz, 90Hz, or 120Hz, and limit the FPS settings\naccordingly. For example, if the device only supports up to 60Hz, it is\nadvisable to disable any options higher than 60FPS in the game settings to\navoid confusing the player."]]