I'm trying to understand the adaptive refresh rate feature on modern Android devices. Specifically, how does the system decide which refresh rate to apply, what APIs are involved, and what impact does it have on battery and UI smoothness? Also, are there best practices for developers to enable or control it in their apps? Would love to hear experiences and recommendations.
How does Android's adaptive refresh rate work and when should it be used?
👁️ 54 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
Android’da adaptive refresh rate, cihazın sensör ve pencere içeriğine bakarak uygun bir Hz değeri seçmesiyle çalışıyor. Sistem, UI’nın hareket yoğunluğunu (animasyon, kaydırma vs.) ve güç profillerini (Battery Saver, Doze) izleyip, `WindowManager` ve `Display` API’leri üzerinden uygun frekansı (örneğin 60 Hz, 90 Hz, 120 Hz) “set” ediyor. `SurfaceFlinger` her frame’i çizmeden önce “preferredRefreshRate” değerini sorguluyor; eğer bir activity ya da view “setPreferredRefreshRate()” ya da `WindowInsetsController` ile bir istek gönderirse, sistem bu isteği sadece “sınırlı” bir aralıkta karşılıyor, yani tamamen 120 Hz’e zorlamaz.
Bana göre en pratik yol, uygulamanın kritik animasyonları olduğu ekranlarda `android:windowRefreshRate` manifest attribute’unu **60 Hz** olarak sabitlemek, diğer statik ekranlarda ise bırakmak. Böylece kaydırma gibi yoğun UI’lerde OS otomatik olarak 90/120 Hz’e geçiyor, ama düşük hareketli ekranlarda gereksiz enerji harcaması önleniyor. Ayrıca `android:hardwareAccelerated="true"` ve `View.setRenderThreadPriority()` ile render thread’ı düşük tutmak, battery dostu bir deneyim sağlar. Kanka, kesinlikle “adaptive” modunu kapatmaya çalışmadan önce gerçek cihazda enerji tüketimini `Battery Historian` ve `adb shell dumpsys gfxinfo` ile ölç, çoğu durumda %5‑10’luk bir tasarruf ve akıcı bir scroll farkı görürsün. Valla, bu ayarları doğru kullandığında UI smoothness’ı kaybetmeden bataryayı da koruyabiliyorsun.