Android Profiler ist eine in Android Studio integrierte Tool-Sammlung zur Echtzeit-Überwachung der Anwendungsleistung. Er ermöglicht die Verfolgung von CPU-Auslastung, Speicherverbrauch, Netzwerkverkehr und Energieverbrauch ohne Installation von Drittanbieter-Bibliotheken. Laut Android Developers ist der Profiler direkt in die IDE integriert und liefert Metriken mit Millisekunden-Genauigkeit für jeden Prozess auf dem verbundenen Gerät.
Das Wichtigste
Android Profiler ist eine Komponente von Android Studio, die die veralteten Android Monitor und DDMS ersetzt hat. Er bietet eine einheitliche Oberfläche zum Profiling aller Aspekte der Anwendung: CPU Profiler für die Prozessoranalyse, Memory Profiler für die Speicherarbeit, Network Profiler für Netzwerkanfragen und Energy Profiler für den Energieverbrauch. Die Daten werden automatisch beim Starten der Anwendung über Android Studio gesammelt.
Der Profiler funktioniert sowohl auf dem Emulator als auch auf einem über USB verbundenen physischen Gerät. Laut Google I/O 2023 wird Android Profiler in mehr als 70% der Android-Projekte verwendet und gilt als Standardwerkzeug für die Leistungsdiagnose. Der Hauptvorteil gegenüber Drittanbieter-Lösungen ist die Null-Integration: Es müssen keine Abhängigkeiten in build.gradle hinzugefügt oder der Anwendungscode geändert werden.
Die Architektur von Android Profiler basiert auf Perfetto — dem Android-System-Tracer, der Daten auf Kernel- und Anwendungsebene sammelt. Perfetto gewährleistet minimale Überlastung (weniger als 1% CPU) und unterstützt Langzeitaufzeichnungen von bis zu 30 Minuten. Dies ermöglicht das Profiling nicht nur schneller Operationen, sondern auch langer Szenarien — Bildschirmübergänge, Hintergrundsynchronisierung, Speicherverbrauch über eine Stunde Nutzung.
Der Profiler sammelt vier Datentypen: CPU — Auslastung jedes Kerns und Threads, Memory — Java Heap, Native Heap, Stack, Graphics, Network — alle eingehenden und ausgehenden Anfragen, Energy — Kategorien des Energieverbrauchs (Idle, Light, Medium, Heavy). Die Daten sind auf der Zeitachse synchronisiert — man kann gleichzeitig sehen, wie sich die CPU-Änderung auf Memory und Energieverbrauch auswirkt.
CPU Profiler zeigt die Prozessorauslastung in Echtzeit auf der Zeitachse, aufgeteilt nach Anwendungsthreads. Jeder Thread wird durch eine farbige Linie oder Fläche dargestellt — je breiter die Fläche, desto mehr Prozessorzeit nimmt der Thread ein. Rote Flächen bedeuten Anwendungsarbeit, blaue Systemaufrufe, graue Wartezeit.
Für detaillierte Analysen unterstützt CPU Profiler drei Aufnahmemodi: Trace Java Methods (Ablaufverfolgung aller Java-Methoden), Trace C/C++ Functions (Ablaufverfolgung nativer NDK-Funktionen) und Sample Java Methods (Sampling, empfohlener Modus). Sampling bietet die geringste Überlastung und eignet sich für das tägliche Profiling, während die vollständige Ablaufverfolgung zur Suche komplexer Probleme dient.
// Beispiel: Die CPU Profiler-Analyse zeigt diese Methode als Bottleneck
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler zeigt hohe CPU-Auslastung in inBackgroundThread
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// Empfehlung nach dem Profiling:
// computeHeavyTransformation benötigt 80% der Zeit — Ergebnis cachen
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
Nach der Aufnahme zeigt CPU Profiler den Top-Down Tree — einen Aufrufbaum mit der Ausführungszeit jeder Methode. Achten Sie auf die Spalte Self Time/Total: Wenn die Self Time einer Methode mehr als 16 ms beträgt und sie aus dem UI-Thread aufgerufen wird — ist dies ein garantiertes Frame-Dropping. Lösung: Verlagern Sie schwere Berechnungen über Dispatchers.IO oder Default in den Hintergrundthread.
Sample Java Methods — empfohlener Modus für tägliches Profiling mit 3–5% Überlastung. Trace Java Methods — vollständige Ablaufverfolgung jedes Aufrufs, bis zu 15% Überlastung, wird für kurze Aufzeichnungen (5–10 Sekunden) verwendet. Trace C/C++ Functions — Ablaufverfolgung von NDK-Code über Linux Perf, unverzichtbar für die Analyse von Spielen und C++-Bibliotheken. Wechseln Sie die Modi je nach Problemtyp.
Memory Profiler verfolgt alle Speicherkategorien der Anwendung: Java Heap (JVM-Objekte), Native Heap (C/C++-Allokationen über JNI), Stack (Thread-Stapel) und Graphics (Texturen, GPU-Puffer). Die Hauptvisualisierung ist das zeitliche Diagramm des Speicherverbrauchs, bei dem jede Kategorie in ihrer eigenen Farbe dargestellt wird. Wenn das Diagramm nach der Garbage Collection nicht abfällt — vermuten Sie ein Leck.
Verwenden Sie die Funktion Capture Heap Dump, um Lecks zu finden. Zum Zeitpunkt des Dumps stoppt Android Profiler die Anwendung für ~100 ms und erstellt eine HPROF-Datei — eine vollständige Momentaufnahme aller lebenden Objekte des Java Heap. Nach dem Öffnen des Dumps können Sie Objekte nach Retained Size sortieren (Speichervolumen, das beim Entfernen des Objekts freigegeben wird) und nach Instanzen von Activity, Fragment oder Bitmap suchen, die hätten zerstört werden müssen.
Laut Google I/O 2022 deckt Memory Profiler in Verbindung mit LeakCanary 95% der Erkennungsszenarien von Speicherlecks auf Android ab. LeakCanary arbeitet automatisch — erkennt Lecks im Hintergrund. Memory Profiler wird für die manuelle Analyse benötigt: Sie sehen das vollständige Bild der Allokationen, nicht nur Lecks.
| Speicherkategorie | Beschreibung | Typische Größe |
|---|---|---|
| Java Heap | JVM-Heap: Kotlin/Java-Objekte | 5–200 MB |
| Native Heap | Allokationen über JNI, NDK | 1–100 MB |
| Graphics | Texturen, GPU-Puffer | 10–200 MB |
| Stack | Stapel aller Threads | 1–10 MB |
Sortieren Sie nach dem Erfassen des Dumps die Objekte nach Retained Size — das ist das Speichervolumen, das beim Entfernen des Objekts freigegeben wird. Suchen Sie nach Instanzen von Activity, Fragment und Bitmap mit großer Retained Size, die sich nicht im Speicher befinden sollten. Wechseln Sie zum Tab Reference Tree, um die Referenzkette zu sehen, die das Objekt hält — meistens handelt es sich um ein statisches Feld eines Singletons oder einen nicht bereinigten Callback. Eine wichtige Metrik ist die Allocation rate (Anzahl der Allokationen pro Sekunde). Wenn die Allocation rate 10.000 Objekte/s überschreitet, verbringt die Anwendung zu viel Zeit mit dem Erstellen und Entfernen temporärer Objekte, was den GC belastet und Mikroverzögerungen verursacht. Verwenden Sie in diesem Fall das View Inspector-Tool und finden Sie Stellen mit häufiger Objekterstellung in Schleifen.
Network Profiler zeigt alle Netzwerkanfragen der Anwendung in Echtzeit auf der Zeitachse an. Jede Anfrage wird als horizontaler Balken dargestellt — seine Länge entspricht der Ausführungszeit, die Farbe dem Anfragetyp (GET, POST, PUT, DELETE). Durch Scrollen der Skala können Sie sehen, wie die Anfragen über die Zeit verteilt sind und ob sie dupliziert werden.
Alle gängigen Bibliotheken werden unterstützt: OkHttp, Retrofit, Volley, Ktor. Für Ktor und OkHttp zeigt der Profiler den vollständigen Aufrufstapel einschließlich Interceptors und Konvertern. Für jede Anfrage sind Request Headers und Response Headers, der Antworttext (bis zu 1 MB), der Statuscode und die Dauer verfügbar.
Typische Probleme, die vom Network Profiler erkannt werden: fehlendes Caching (dieselbe URL wird bei jedem Öffnen angefordert), duplizierte Anfragen (zwei Komponenten laden gleichzeitig dieselben Daten), übermäßige Antwortgröße (der Server sendet 5 MB, wenn 50 KB benötigt werden). Network Profiler hilft, solche Probleme mit einem einzigen Blick auf die Zeitachse zu erkennen.
Verwenden Sie Network Conditioning in Android Studio, um langsame Netzwerke zu simulieren — es ermöglicht die Begrenzung der Bandbreite auf 3G/2G und das Hinzufügen von Verzögerung. Dies ist besonders wichtig für das Testen des Anwendungsverhaltens unter schlechten Netzwerkbedingungen, insbesondere für Anwendungen, die in Regionen mit instabilem Internet arbeiten.
Energy Profiler bewertet die Auswirkungen der Anwendung auf den Akku basierend auf Perfetto-Daten. Das Tool misst nicht den tatsächlichen Verbrauch in Milliampere, sondern klassifiziert jeden Vorgang in eine von fünf Energieverbrauchskategorien: Idle, Light, Medium, High und Overloaded. Die Zeitachse des Energy Profilers wird farblich hervorgehoben: grün (leichte Last), gelb (mittlere), rot (hohe).
Hauptursachen für rote Zonen: WakeLock (die Anwendung hält den Prozessor aktiv), Location GPS (ständige Standortabfragen mit hoher Genauigkeit), Keep-Alive-Verbindungen (häufiger Datenaustausch mit dem Server), große Datenübertragungen (Dateiversand, Streaming). Energy Profiler zeigt genau an, welcher Vorgang zu welchem Zeitpunkt den Energieverbrauchsspitzenwert verursacht hat.
Laut Android Developers sollte eine typische Anwendung nicht mehr als 5% der Zeit in der Kategorie High verbringen. Wenn Energy Profiler rote Zonen über mehr als 10% der Profilierungszeit anzeigt — besteht die Anwendung die Überprüfung nach dem Battery-Drain-Kriterium nicht. Empfehlung — Verwenden Sie WorkManager für Hintergrundaufgaben, beschränken Sie Location-Anfragen auf die minimal erforderliche Genauigkeit und bündeln Sie Netzwerkanfragen in Batches.
Der Start des Android Profilers erfolgt mit einem Klick: Öffnen Sie in Android Studio View → Tool Windows → Profiler oder doppelklicken Sie auf das Profiler-Symbol im rechten Bereich. Nach dem Starten der Anwendung auf dem verbundenen Gerät verbindet sich Android Studio automatisch mit dem Prozess und beginnt mit der Datenerfassung. Auf der Zeitachse erscheinen sofort die Diagramme für CPU, Memory, Network und Energy.
Wählen Sie für eine detaillierte Analyse die gewünschte Registerkarte (CPU, Memory, Network oder Energy) und starten Sie die Aufnahme. Für CPU empfehle ich den Modus Sample Java Methods mit einer Aufnahmedauer von 30 Sekunden — das ist für ein typisches Szenario ausreichend. Für Memory — einen Heap-Dump nach der Szenarioausführung (Capture Heap Dump). Für Network wird die Aufnahme automatisch gestartet, drücken Sie einfach nach Abschluss des Szenarios die Stop-Taste.
Exportieren Sie die Daten nach dem Stoppen der Aufnahme: File → Save As speichert die gesamte Sitzung in einer .perf-Datei. Dies ist praktisch für den Vergleich von Metriken vor und nach der Optimierung. Erstellen Sie eine Baseline-Sitzung in der ersten stabilen Version und vergleichen Sie jede neue Sitzung damit — dies ist die einzige Möglichkeit, Leistungsänderungen objektiv zu bewerten.
Android Profiler kann über die Befehlszeile mit Android Studio CLI und Firebase Test Lab gestartet werden. Firebase Test Lab unterstützt das Leistungsprofiling als Teil von UI-Tests: Sie erhalten CPU-, Memory- und Network-Metriken zusammen mit dem Testergebnis. Richten Sie die Pipeline so ein, dass die CI-Pipeline bei einem Abfall der Metriken um 10% gegenüber der Baseline bis zur Überprüfung durch den Entwickler blockiert wird.
Häufig gestellte Fragen
Die Auswirkung ist minimal. Android Profiler verwendet Perfetto zur Datenerfassung, das weniger als 1% CPU-Überlastung hinzufügt. Im Modus Sample Java Methods beträgt die Überlastung etwa 3–5%, was für das Szenario-Profiling unbedeutend ist. Die vollständige Methodenverfolgung kann eine Überlastung von bis zu 15% verursachen, daher wird sie nur für kurze Aufzeichnungen verwendet.
Ja, System-Traces können über Perfetto CLI direkt vom Gerät aufgezeichnet werden: adb shell perfetto --out /data/local/tmp/trace.perf. Öffnen Sie die Datei dann in der Perfetto UI (ui.perfetto.dev) oder importieren Sie sie in Android Studio zur Anzeige mit der vollständigen Anwendungsmarkierung.
Android Profiler ist ein Systemtool, das keine Proxy-Konfiguration erfordert. Es zeigt Anfragen direkt in der IDE im Leistungskontext an. Charles Proxy ist ein externer Proxy-Server, der detailliertere Analysen bietet (Verkehrsabfang, Anfragenänderung, erneutes Senden). Verwenden Sie für das Leistungsprofiling Android Profiler, für die Analyse von API-Verträgen Charles.
Erstellen Sie einen Heap-Dump vor der Ausführung des Szenarios (z. B. vor dem Öffnen der Activity). Führen Sie das Szenario aus — öffnen und schließen Sie die Activity. Erstellen Sie einen zweiten Dump. Vergleichen Sie die Anzahl der lebenden Activity-Instanzen: Wenn es im zweiten Dump mehr sind — Leck. Sortieren Sie nach Retained Size, finden Sie zusätzliche Activities und sehen Sie im Reference Tree nach der Ursache.
Energy Profiler erfordert Power Profiles-Unterstützung auf Geräteebene und Android 8.0+. Auf Emulatoren und einigen Firmwares (insbesondere chinesischen) können Daten fehlen. Lösung — Profilen Sie den Energieverbrauch auf Referenzgeräten von Pixel oder Samsung mit reiner Android-Firmware.
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