60fps — 60 képkocka másodpercenkénti frekvencia, ahol minden egyes képkocka pontosan 16.7 ms-ig tart, vizuálisan sima mozgást biztosítva. Az Android Game Optimization Guide szerint a stabil 60 FPS a minimális szabványa a kényelmes animációnak a mobilalkalmazásokban. 16.7 ms — ez az időköltségvetés egy képkocka megjelenítésére, amit a fejlesztőnek be kell tartania a 60 FPS eléréséhez.
Főbb pontok
60fps (60 képkocka másodpercenként, frames per second) — a képkockaváltási frekvencia mutatója, ahol a kijelzõ másodpercenként 60-szor frissíti a képet. Az emberi szem a látás perzisztenciájának hatására kb. 50–60 Hz-nél abbahagyja a diszkrét képkockák megkülönböztetését, ami a 60fps-t természetes simasági küszöbé teszi a legtöbb felhasználó számára.
Minden képkocka 60fps esetén rögzített időköltségvetéssel rendelkezik, ami 16.67 ms. Ez a költségvetés magában foglalja az összes időt: a felhasználói bemenet feldolgozásától a megjelenítésig és a képernyőre való kimenetig. Ha bármely művelet — fizika, animáció, összetett jelenet rajzolása — túllépi ezt a határt, a képkocka frekvencia 30fps-re vagy alább csökken, ami vizuálisan akadozásként érzékelhető.
A mobilfejlesztésben a 60fps hosszú ideig határ volt a hardverkoriátozások miatt: a legtöbb kijelző 2017-ig 60 Hz-en működött. A 90 Hz-es és 120 Hz-es képernyők megjelenésével a 60fps alsó szabvánnyá vált, nem felső céllá. Az UI-alkalmazások, videók és a legtöbb alkalmi játék számára azonban a 60fps továbbra is a célmutató a teljesítményben.
60 Hz — a váltakozó áram frekvenciája az USA és Japán elektromos hálózataiban, amely történelmileg meghatározta az első NTSC televíziós szabványok letapogatási frekvenciáját. A PAL szabvány 50 Hz-et használt az európai 50 Hz-es hálózat miatt. Ez a történelmi tehetetlenség átkerült a számítógépes monitorokra, majd a mobil kijelzőkre.
A perzisztencia hatása — az emberi látás azon tulajdonsága, hogy a képet kb. 30–50 ms-ig megtartja a retinán az inger eltűnése után. 60fps-nél 16.7 ms-onként érkezik egy új képkocka — mielőtt az előző képkocka perzisztenciális nyoma eltűnne, így a folyamatos mozgás illúzióját kelti. A Cardiffi Egyetem (2023) kutatásai szerint a vadászrepülő pilóták 220 Hz-nél is képesek egyetlen képkockát megkülönböztetni, de az átlagos felhasználó számára a 60 és 120 Hz közötti különbség sokkal kevésbé észrevehető, mint a 30 és 60 Hz közötti.
Az Apple 2007-ben az első iPhone-nal 60fps-t állította be iOS szabványként, és ezt az iPhone 13 Pro-ig (2021) megtartotta. Az Android történelmileg követte ugyanazt a szabványt, bár az első 90 Hz-es (OnePlus 7 Pro, 2019) és 120 Hz-es (Razer Phone, 2017) eszközök korábban jelentek meg. Ma a 60fps a minimális küszöb az App Store és Google Play review-nak való megfeleléshez az animációs alkalmazások számára, bár a követelmények nincsenek formálisan dokumentálva.
FPS mérése — az optimalizálás első lépése. Objektív mutatók nélkül lehetetlen meghatározni, hol vész el pontosan a teljesítmény. A mobil platformok beépített profilozó eszközöket és szoftver API-kat kínálnak a képkocka frekvencia valós idejű méréséhez.
Android Studio Profiler és Xcode Instruments — a fő eszközök a FPS elemzéséhez. Az Android Profiler mutatja a GPU Render Time-t, Frame Rate-t és Jank-ot (kihagyott képkockák száma). Az Xcode Instruments tartalmazza a Core Animation sablont, amely megjeleníti a képkocka frekvenciát, a megjelenítési időt és a draw calls számát. A játékmotorokhoz a Unity Profiler és az Unreal Insights részletes időbontást nyújtanak modulonként.
// Android — FPS mérése FrameMetrics segítségével
window.addOnFrameMetricsAvailableListener(
{ _, frameMetrics ->
val duration = frameMetrics[FrameMetrics.TOTAL_DURATION]
val fps = 1000f / (duration / 1_000_000f)
Log.d("FPS", "Frame duration: ${duration / 1_000_000} ms, FPS: $fps")
},
Handler(Looper.getMainLooper())
)
CADisplayLink iOS-ben és Choreographer Androidban — rendszerszintű mechanizmusok, amelyek szinkronizálják a rajzolást a kijelző frissítési frekvenciájával. A CADisplayLink minden új képkockával meghívja a metódust, timestamp-et adva át a késleltetés kiszámításához. Az Androidban a Choreographer ugyanezt teszi, de támogatja a visszahívásokat a képkocka különböző fázisaihoz: bemenet, animáció, treviz, megjelenítés. A fejlesztő feliratkozhat a Choreographer.FrameCallback-re és mérheti a képkockák közötti időt.
Stabil 60fps azt jelenti, hogy egyetlen képkocka sem lépi túl a 16.7 ms-os költségvetést. Még egy hosszú képkocka is másodpercenként észrevehető akadozást okoz. Az optimalizálás három szintre oszlik: CPU, GPU és memória. Mindegyik szűk keresztmetszetté válhat.
Layout pass — az egyik fő CPU-időfogyasztó Androidban és iOS-ben. Az összetett View-hierarchia, egymásba ágyazott ConstraintLayout, nehéz drawable hosszú measure és layout láncokat hoz létre. Az UI-alkalmazásokhoz használjon lapos View-hierarchiát (mélység legfeljebb 3–4 szint), cserélje ki az egymásba ágyazott RecyclerView-t ConcatAdapter-re, és iOS-ben a listákhoz használjon compositional layout-t prefetchinggel.
| Művelet | Jellemző idő | Hatás túllépéskor |
|---|---|---|
| Layout | 1–3 ms | Akadozás összetett képernyőknél |
| Draw | 2–8 ms | Úrjrarajzolás, képkocka kihagyás |
| GPU Render | 3–10 ms | FPS felére csökkenése |
| GC (szemétgyűjtés) | 2–50 ms | Látható mikro-akadozások |
Overdraw — ugyanazon pixelek többszörös megjelenítése. Minden View réteg, háttér, átlátszó elem alatti kép növeli a pixelműveletek számát. Androidban használja a Debug GPU Overdraw-t a Developer Options-ben, iOS-ben — Xcode Debug View Hierarchy-t. Csökkentse az overdraw-t a felesleges hátterek eltávolításával és opaque jelzők használatával: Androidban — @drawable android:opaque-val, iOS-ben — isOpaque = true a UIKit.View számára.
Draw calls — a GPU-nak küldött megjelenítési parancsok száma. A modern mobil GPU-k 200–400 draw call-t dolgoznak fel képkockánként 60fps-nél. E szám túllépése teljesítménycsökkenést okoz. Egyesítse a sprite-okat textúra atlaszokba, használjon batchinget és kerülje az egyes elemek egyéni megjelenítését külön draw call-on keresztül.
GC szünetek — az instabil FPS egyik fő oka a JVM és Kotlin alkalmazásokban. A szemétgyűjtés Androidban 30–50 ms-ig tarthat, 2–3 egymást követő képkocka kihagyását okozva. Kerülje az allokációkat animációs ciklusokban, használjon objektum poolokat és előzetes memóriafoglalást. iOS-ben a probléma kevésbé kritikus az ARC miatt, de a retain ciklusok és az autorelease pool túlcsordulása szintén mikro-szüneteket okoz.
A játékok számára a 60fps nem csak szabvány, hanem versenyelőny is. A Newzoo (2024) kutatásai szerint az instabil, 60 alatti FPS-sel rendelkező játékok 40%-kal több negatív értékelést kapnak a Google Play-ben. Az Unity és az Unreal Engine beépített profilereket kínál a megjelenítési idő ellenőrzéséhez: Unityben ez a Frame Debugger, Unrealben — GPU Visualizer, amelyek minden draw call és shader pontos idejét mutatják. A stabil 60fps különösen fontos az akciójátékok számára, ahol minden kihagyott képkocka a felhasználónak a szint elvesztésébe kerülhet.
A 90 Hz és 120 Hz kijelzők megváltoztatják a teljesítménycélt. A ProMotion eszközökön futó alkalmazások számára a cél FPS 120 lehet, és a képkocka költségvetése 8.3 ms-ra csökken. Ez kétszer hatékonyabb kódot igényel, különösen a draw calls és a GPU-megjelenítés terén.
A magas frekvenciák előnye nem csak a simaságban rejlik: a 120fps 8–10 ms-mal csökkenti az észlelhető bemeneti késleltetést, ami kritikus a játékok és interaktív alkalmazások számára. A 60 és 120fps közötti különbség azonban egyéni megközelítést igényel: UI-alkalmazások (görgetés, animációk) számára a 90fps optimális kompromisszum lehet a simaság és az energiafogyasztás között, mivel 120 képkocka másodpercenkénti megjelenítése 30–40%-kal több energiát fogyaszt, mint a 60.
Az Apple API-t biztosít az előnyben részesített frekvencia kiválasztásához: preferredFramesPerSecond a CADisplayLink-ben. Az Android API 30-ig nem biztosít közvetlen vezérlést a frekvencia felett, de Android 12-től kezdve a fejlesztő beállíthatja a RefreshRate-et a WindowManager-en keresztül, 60, 90 vagy 120 Hz-t kérve a tartalom típusától függően.
Gyakran Ismételt Kérdések
A 30fps rándulásként érzékelhető görgetés és animációk során, mert minden képkocka 33.3 ms-ig tart, és a szem észleli a diszkrétséget. A 60fps 16.7 ms-onként biztosít egy képkockát — a látás perzisztenciájának küszöbe alatt a legtöbb felhasználó számára.
Használjon profilert (Android Profiler, Xcode Instruments) és nézze meg a frame time hisztogramot. Ha a képkockák 90%+ belefér 16.7 ms-ba kiugrások nélkül — az FPS stabil. Az egyes kiugrások 30–50 ms-ig észrevehető akadozást okoznak.
Igen, de ez agresszív optimalizálást igényel: alacsony megjelenítési felbontás, egyszerű shaderek, minimális draw calls szám, átlátszóság és összetett árnyékok mellőzése. Tesztelje alsó kategóriás eszközökön — ezek mutatják a valós teljesítményt.
A VSync mechanizmus miatt: ha a GPU nem tudja befejezni a képkockát 16.7 ms alatt, kihagyja a VBlank-et és az aktuális képkockát még 16.7 ms-ig tartja. Gyakorlatilag egy képckockát két frissítési ciklusban jelenít meg, és a FPS pontosan a felére csökken.
Igen. Még az egyszerű lista görgetés és átmeneti animációk is 60fps-t igényelnek a kényelmes érzékeléshez. A felhasználók azonnal észreveszik a lassulást a swipe-oknál, és ez 2–3-szorosan csökkenti az alkalmazás értékelését a szubjektív tesztekben.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is