60fps ist eine Bildrate von 60 Bildern pro Sekunde, bei der jedes Bild genau 16,7 ms benötigt und eine visuell flüssige Bewegung gewährleistet. Laut dem Android Game Optimization Guide gelten stabile 60 FPS als Mindeststandard für komfortable Animationen in mobilen Anwendungen. 16,7 ms ist das Zeitbudget für das Rendern eines einzelnen Bildes, das ein Entwickler einhalten muss, um 60 FPS zu erreichen.
Das Wichtigste
60fps (60 Bilder pro Sekunde, frames per second) ist ein Maß für die Bildwiederholrate, bei der das Display das Bild 60 Mal pro Sekunde aktualisiert. Das menschliche Auge hört aufgrund des Persistenzeffekts des Sehens bei etwa 50–60 Hz auf, einzelne Bilder zu unterscheiden, was 60fps zu einer natürlichen Flüssigkeitsschwelle für die meisten Benutzer macht.
Jedes Bild bei 60fps hat ein festes Zeitbudget von 16,67 ms. Dieses Budget umfasst alles: von der Verarbeitung der Benutzereingabe bis zum Rendern und der Ausgabe auf dem Bildschirm. Wenn ein Vorgang — Physik, Animation, Rendern einer komplexen Szene — diese Grenze überschreitet, fällt die Bildrate auf 30fps oder niedriger, was visuell als Ruckeln wahrgenommen wird.
In der mobilen Entwicklung war 60fps aufgrund von Hardwareeinschränkungen lange Zeit die Obergrenze: Die meisten Displays vor 2017 arbeiteten mit 60 Hz. Mit dem Aufkommen von 90-Hz- und 120-Hz-Bildschirmen wurde 60fps zum unteren Standard statt zum oberen Ziel. Für UI-Anwendungen, Videos und die meisten Gelegenheitsspiele bleibt 60fps jedoch der Zielindikator für die Leistung.
60 Hz ist die Frequenz des Wechselstroms in den Stromnetzen der USA und Japans, die historisch die Bildwiederholfrequenz der ersten NTSC-Fernsehnormen bestimmte. Der PAL-Standard verwendete 50 Hz aufgrund des europäischen 50-Hz-Stromnetzes. Diese historische Trägheit ging auf Computermonitore und später auf mobile Displays über.
Der Persistenzeffekt ist eine Eigenschaft des menschlichen Sehens, die ein Bild etwa 30–50 ms nach dem Verschwinden des Reizes auf der Netzhaut hält. Bei 60fps kommt ein neues Bild alle 16,7 ms an — bevor die Persistenzspur des vorherigen verschwindet, was die Illusion einer kontinuierlichen Bewegung erzeugt. Studien der Cardiff University (2023) zeigen, dass Kampfpiloten ein einzelnes Bild bei 220 Hz unterscheiden können, aber für den durchschnittlichen Benutzer ist der Unterschied zwischen 60 und 120 Hz weit weniger auffällig als zwischen 30 und 60 Hz.
Apple legte 2007 mit dem ersten iPhone 60fps als Standard für iOS fest und hielt daran bis zum iPhone 13 Pro (2021) fest. Android folgte historisch demselben Standard, obwohl die ersten Geräte mit 90 Hz (OnePlus 7 Pro, 2019) und 120 Hz (Razer Phone, 2017) früher erschienen. Heute ist 60fps die Mindestschwelle für die Zulassung von Anwendungen mit Animationen im App Store und bei Google Play, obwohl die formalen Anforderungen nicht dokumentiert sind.
Die FPS-Messung ist der erste Schritt der Optimierung. Ohne objektive Metriken ist es unmöglich festzustellen, wo Leistung verloren geht. Mobile Plattformen bieten integrierte Profiling-Tools und Software-APIs zur Messung der Bildrate in Echtzeit.
Android Studio Profiler und Xcode Instruments sind die wichtigsten Werkzeuge zur FPS-Analyse. Android Profiler zeigt GPU-Renderzeit, Bildrate und Jank (Anzahl der ausgelassenen Bilder). Xcode Instruments enthält die Core Animation-Vorlage, die Bildrate, Renderzeit und Anzahl der Draw Calls anzeigt. Für Spiele-Engines bieten Unity Profiler und Unreal Insights detaillierte Zeitaufschlüsselungen nach Modulen.
// Android — FPS-Messung über 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 unter iOS und Choreographer unter Android sind Systemmechanismen, die das Rendern mit der Bildwiederholfrequenz des Displays synchronisieren. CADisplayLink ruft eine Methode mit jedem neuen Bild auf und übergibt einen Zeitstempel zur Verzögerungsberechnung. Choreographer unter Android macht dasselbe, unterstützt aber Rückrufe für verschiedene Bildphasen: Eingabe, Animation, Traversal, Rendering. Der Entwickler kann Choreographer.FrameCallback abonnieren und die Zeit zwischen Bildern messen.
Stabile 60fps bedeuten, dass kein Bild das Budget von 16,7 ms überschreitet. Selbst ein langes Bild pro Sekunde erzeugt spürbares Ruckeln. Die Optimierung gliedert sich in drei Ebenen: CPU, GPU und Speicher. Jede von ihnen kann zum Engpass werden.
Der Layout-Durchlauf ist einer der Hauptverbraucher von CPU-Zeit unter Android und iOS. Komplexe View-Hierarchien, verschachtelte ConstraintLayouts und schwere Drawables erzeugen lange Measure- und Layout-Ketten. Verwenden Sie für UI-Anwendungen eine flache View-Hierarchie (Tiefe nicht mehr als 3–4 Ebenen), ersetzen Sie verschachtelte RecyclerViews durch ConcatAdapter und für Listen unter iOS — Compositional Layout mit Prefetching.
| Operation | Typische Zeit | Auswirkung bei Überschreitung |
|---|---|---|
| Layout | 1–3 ms | Ruckeln bei komplexen Bildschirmen |
| Draw | 2–8 ms | Neuzeichnen, Bildausfälle |
| GPU Render | 3–10 ms | FPS-Abfall um die Hälfte |
| GC (Garbage Collection) | 2–50 ms | Wahrnehmbare Mikroruckler |
Overdraw ist das wiederholte Rendern derselben Pixel. Jede View-Ebene, jeder Hintergrund und jedes Bild unter einem transparenten Element erhöht die Anzahl der Pixeloperationen. Verwenden Sie unter Android Debug GPU Overdraw in den Entwickleroptionen; unter iOS — Xcode Debug View Hierarchy. Reduzieren Sie Overdraw, indem Sie unnötige Hintergründe entfernen und undurchsichtige Flags verwenden: unter Android — @drawable mit android:opaque, unter iOS — isOpaque = true für UIKit.View.
Draw Calls sind die Anzahl der an die GPU gesendeten Renderbefehle. Moderne mobile GPUs verarbeiten 200–400 Draw Calls pro Bild bei 60fps. Wird diese Anzahl überschritten, kommt es zu Leistungseinbußen. Fassen Sie Sprites in Texturatlanten zusammen, verwenden Sie Batching und vermeiden Sie das individuelle Rendern jedes Elements durch einen separaten Draw Call.
GC-Freezes sind eine der Hauptursachen für instabile FPS in JVM- und Kotlin-Anwendungen. Die Garbage Collection unter Android kann bis zu 30–50 ms dauern und dazu führen, dass 2–3 Bilder hintereinander übersprungen werden. Vermeiden Sie Allokationen in Animationsschleifen, verwenden Sie Objektpools und Speichervorbelegung. Unter iOS ist das Problem aufgrund von ARC weniger kritisch, aber Retain-Zyklen und Überläufe des Autorelease-Pools erzeugen ebenfalls Mikroruckler.
Für Spiele ist 60fps nicht nur ein Standard, sondern ein Wettbewerbsvorteil. Studien von Newzoo (2024) zeigen, dass Spiele mit instabilen FPS unter 60 auf Google Play 40 % mehr negative Bewertungen erhalten. Unity und Unreal Engine bieten integrierte Profiler zur Überwachung der Renderzeit: in Unity ist es der Frame Debugger, in Unreal — GPU Visualizer, die die genaue Zeit jedes Draw Calls und Shaders anzeigen. Stabile 60fps sind besonders wichtig für Action-Spiele, wo jedes ausgelassene Bild den Benutzer das Abschließen eines Levels kosten kann.
90-Hz- und 120-Hz-Displays verändern die Zielvorgabe für die Leistung. Für Anwendungen, die auf ProMotion-Geräten laufen, kann der Ziel-FPS 120 betragen, und das Bildbudget schrumpft auf 8,3 ms. Dies erfordert einen doppelt so effizienten Code, insbesondere bei Draw Calls und GPU-Rendering.
Der Vorteil hoher Frequenzen liegt nicht nur in der Flüssigkeit: 120fps reduziert die wahrnehmbare Eingabeverzögerung um 8–10 ms, was für Spiele und interaktive Anwendungen entscheidend ist. Der Unterschied zwischen 60 und 120fps erfordert jedoch eine individuelle Herangehensweise: Für UI-Anwendungen (Scrollen, Animationen) kann 90fps ein optimaler Kompromiss zwischen Flüssigkeit und Energieverbrauch sein, da das Rendern von 120 Bildern pro Sekunde 30–40 % mehr Energie verbraucht als 60.
Apple stellt eine API zur Auswahl der bevorzugten Bildrate bereit: preferredFramesPerSecond in CADisplayLink. Android bot vor API 30 keine direkte Kontrolle über die Bildwiederholfrequenz, aber ab Android 12 kann der Entwickler die RefreshRate über den WindowManager festlegen und je nach Inhaltstyp 60, 90 oder 120 Hz anfordern.
Häufig gestellte Fragen
30fps wird beim Scrollen und bei Animationen als Ruckeln wahrgenommen, da jedes Bild 33,3 ms lang gehalten wird und das Auge die Diskretion bemerkt. 60fps liefert alle 16,7 ms ein Bild — unterhalb der Persistenzschwelle der meisten Benutzer.
Verwenden Sie einen Profiler (Android Profiler, Xcode Instruments) und betrachten Sie das Frame-Zeit-Histogramm. Wenn 90 %+ der Bilder ohne Ausschläge in 16,7 ms passen, sind die FPS stabil. Einzelne Ausschläge bis zu 30–50 ms erzeugen spürbares Ruckeln.
Ja, aber dafür ist eine aggressive Optimierung erforderlich: niedrige Renderauflösung, einfache Shader, minimale Anzahl von Draw Calls, Verzicht auf Transparenz und komplexe Schatten. Testen Sie auf Low-End-Geräten — sie zeigen die tatsächliche Leistung.
Aufgrund des VSync-Mechanismus: Wenn die GPU ein Bild nicht innerhalb von 16,7 ms fertigstellen kann, verpasst sie den VBlank und hält das aktuelle Bild für weitere 16,7 ms. Effektiv wird ein Bild für zwei Aktualisierungszyklen angezeigt, und die FPS fallen genau um die Hälfte.
Ja. Selbst einfaches Listenscrollen und Übergangsanimationen erfordern 60fps für ein angenehmes Erlebnis. Benutzer bemerken Verzögerungen beim Wischen sofort, und dies reduziert die Bewertung der Anwendung in subjektiven Tests um das 2- bis 3-fache.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch