60fps — är en frekvens på 60 bilder per sekund, där varje bild tar exakt 16.7 ms, vilket ger visuellt jämn rörelse. Enligt Android Game Optimization Guide anses stabila 60 FPS vara minimistandarden för bekväm animation i mobila applikationer. 16.7 ms — är tidsbudgeten för att rendera en bild som utvecklaren måste hålla för att uppnå 60 FPS.
Huvudsakligt
60fps (60 bilder per sekund, frames per second) — indikatorn på bildfrekvensen där displayen uppdaterar bilden 60 gånger per sekund. Det mänskliga ögat slutar särskilja diskreta bilder vid ungefär 50–60 Hz tack vare persistenseffekten i synen, vilket gör 60fps till den naturliga tröskeln för jämnhet för de flesta användare.
Varje bild vid 60fps har en fast tidsbudget på 16.67 ms. Denna budget omfattar all tid: från bearbetning av användarinmatning till rendering och utmatning på skärmen. Om någon operation — fysik, animation, rendering av en komplex scen — överskrider denna gräns, sjunker bildfrekvensen till 30fps eller lägre, vilket visuellt uppfattas som hackande.
Inom mobil utveckling var 60fps länge gränsen på grund av hårdvarubegränsningar: de flesta displayer fram till 2017 arbetade på 60 Hz. Med tillkomsten av 90 Hz och 120 Hz skärmar blev 60fps den lägre standarden, inte det övre målet. För UI-applikationer, video och de flesta casual-spel förblir 60fps dock målindikatorn för prestanda.
60 Hz — frekvensen av växelström i elnäten i USA och Japan, som historiskt bestämde avsökningsfrekvensen för de första tv-standarderna NTSC. PAL-standarden använde 50 Hz på grund av det europeiska nätverket på 50 Hz. Denna historiska tröghet överfördes till datorskärmar och därefter till mobila displayer.
Persistenseffekten — egenskapen hos människans syn att behålla bilden på näthinnan i cirka 30–50 ms efter att stimulus försvunnit. Vid 60fps kommer en ny bild var 16.7 ms — innan det persistenta spåret av den föregående bilden försvinner, vilket skapar illusionen av kontinuerlig rörelse. Forskning vid Cardiff University (2023) visar att stridspiloter kan urskilja en enskild bild vid 220 Hz, men för den genomsnittliga användaren är skillnaden mellan 60 och 120 Hz mycket mindre märkbar än mellan 30 och 60 Hz.
Apple fastställde 60fps som standard för iOS 2007 med den första iPhone och behöll den fram till iPhone 13 Pro (2021). Android följde historiskt samma standard, även om de första enheterna med 90 Hz (OnePlus 7 Pro, 2019) och 120 Hz (Razer Phone, 2017) dök upp tidigare. Idag är 60fps minimitröskeln för att passera granskning i App Store och Google Play för applikationer med animation, även om kraven inte är formellt dokumenterade.
Mätning av FPS — första steget i optimering. Utan objektiva mått är det omöjligt att avgöra exakt var prestandan försvinner. Mobila plattformar erbjuder inbyggda profileringsverktyg och mjukvaru-API:er för att mäta bildfrekvensen i realtid.
Android Studio Profiler och Xcode Instruments — de huvudsakliga verktygen för FPS-analys. Android Profiler visar GPU Render Time, Frame Rate och Jank (antal hoppade bilder). Xcode Instruments innehåller mallen Core Animation som visar bildfrekvensen, renderingstiden och antalet draw calls. För spelmotorer erbjuder Unity Profiler och Unreal Insights en detaljerad uppdelning av tid per modul.
// Android — mätning av FPS via FrameMetrics
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 i iOS och Choreographer i Android — systemmekanismer som synkroniserar renderingen med displayens uppdateringsfrekvens. CADisplayLink anropar metoden med varje ny bild och skickar en tidstämpel för att beräkna fördröjningen. Choreographer i Android gör samma sak men stödjer återanrop för olika faser av bilden: inmatning, animation, treviz, rendering. Utvecklaren kan prenumerera på Choreographer.FrameCallback och mäta tiden mellan bildrutor.
Stabila 60fps innebär att ingen bild överskrider budgeten på 16.7 ms. Även en lång bild per sekund skapar märkbart hackande. Optimering är uppdelad i tre nivåer: CPU, GPU och minne. Var och en kan bli en flaskhals.
Layout pass — en av de största konsumenterna av CPU-tid på Android och iOS. Komplex View-hierarki, nästlade ConstraintLayout, tunga drawable skapar långa kedjor av measure och layout. För UI-applikationer, använd en platt View-hierarki (djup högst 3–4 nivåer), ersätt nästlade RecyclerView med ConcatAdapter och för listor i iOS, använd compositional layout med prefetching.
| Operation | Typisk tid | Påverkan vid överskridning |
|---|---|---|
| Layout | 1–3 ms | Hackande vid komplexa skärmar |
| Draw | 2–8 ms | Omritning, hopp över bildrutor |
| GPU Render | 3–10 ms | Halvering av FPS |
| GC (skräpinsamling) | 2–50 ms | Synliga mikro-hack |
Overdraw — upprepad rendering av samma pixlar. Varje View-lager, bakgrund, bild under ett transparent element ökar antalet pixeloperationer. I Android, använd Debug GPU Overdraw i Developer Options, i iOS — Xcode Debug View Hierarchy. Minska overdraw genom att ta bort onödiga bakgrunder och använda opaque-flaggorna: i Android — @drawable med android:opaque, i iOS — isOpaque = true för UIKit.View.
Draw calls — antalet renderingskommandon som skickas till GPU. Moderna mobila GPU:er bearbetar 200–400 draw calls per bild vid 60fps. Överskridande av detta antal orsakar prestandaförsämring. Slå ihop sprites i textur atlaser, använd batching och undvik individuell rendering av varje element genom en separat draw call.
GC-pauser — en av de främsta orsakerna till instabil FPS i JVM- och Kotlin-applikationer. Skräpinsamling på Android kan ta 30–50 ms, vilket orsakar hopp över 2–på varandra följande bilder. Undvik allokeringar i animationsloopar, använd objektpooler och förutseende minnesallokering. På iOS är problemet mindre kritiskt på grund av ARC, men retain-cykler och översvämning av autorelease pool skapar också mikro-pauser.
För spel är 60fps inte bara en standard utan en konkurrensfördel. Forskning från Newzoo (2024) visar att spel med instabil FPS under 60 får 40% fler negativa recensioner i Google Play. Unity och Unreal Engine erbjuder inbyggda profiler för kontroll av renderingstiden: i Unity är det Frame Debugger, i Unreal — GPU Visualizer, som visar den exakta tiden för varje draw call och shader. Stabil 60fps är särskilt viktigt för actionspel, där varje hoppad bild kan kosta användaren att klara en nivå.
90 Hz och 120 Hz displayer förändrar prestandamålet. För applikationer som körs på ProMotion-enheter kan mål-FPS vara 120 och bildbudgeten minskas till 8.3 ms. Detta kräver dubbelt så effektiv kod, särskilt i draw calls och GPU-rendering.
Fördelen med höga frekvenser är inte bara i jämnhet: 120fps minskar märkbar inmatningsfördröjning med 8–10 ms, vilket är kritiskt för spel och interaktiva applikationer. Skillnaden mellan 60 och 120fps kräver dock ett individuellt tillvägagångssätt: för UI-applikationer (scrollning, animationer) kan 90fps vara en optimal kompromiss mellan jämnhet och energiförbrukning, eftersom rendering av 120 bilder per sekund förbrukar 30–40% mer energi än 60.
Apple tillhandahåller API för att välja önskad frekvens: preferredFramesPerSecond i CADisplayLink. Android fram till API 30 ger inte direkt kontroll över frekvensen, men från och med Android 12 kan utvecklaren ställa in RefreshRate via WindowManager och begära 60, 90 eller 120 Hz beroende på innehållstyp.
Vanliga frågor
30fps upplevs som ryckningar vid scrollning och animationer, eftersom varje bild hålls i 33.3 ms och ögat hinner uppfatta diskretionen. 60fps levererar en bild var 16.7 ms — under persistensgränsen för de flesta användare.
Använd en profiler (Android Profiler, Xcode Instruments) och titta på histogrammet för bildtiden. Om 90%+ av bilderna ryms inom 16.7 ms utan toppar — är FPS stabil. Enstaka toppar upp till 30–50 ms skapar märkbart hackande.
Ja, men det kräver aggressiv optimering: låg renderingsupplösning, enkla shaders, minimalt antal draw calls, avstående från genomskinlighet och komplexa skuggor. Testa på lågprisenheter — de visar verklig prestanda.
På grund av VSync-mekanismen: om GPU inte kan slutföra bilden på 16.7 ms, missar den VBlank och håller den aktuella bilden i ytterligare 16.7 ms. I praktiken visas en bild under två uppdateringscykler och FPS sjunker exakt till hälften.
Ja. Även enkel scrollning av listor och övergångsanimationer kräver 60fps för bekväm upplevelse. Användare märker omedelbart förseningar vid svepningar, och detta sänker betyget för applikationen 2–3 gånger i subjektiva tester.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också