Android Profiler är en uppsättning verktyg inbyggda i Android Studio för realtidsövervakning av applikationsprestanda. Den gör det möjligt att spåra CPU-belastning, minnesanvändning, nätverkstrafik och energiförbrukning utan att installera tredjepartsbibliotek. Enligt Android Developers är profileraren direkt integrerad i IDE och tillhandahåller mätvärden med millisekunders precision för alla processer på den anslutna enheten.
Huvudpunkter
Android Profiler är en komponent i Android Studio som har ersatt de äldre Android Monitor och DDMS. Den tillhandahåller ett enhetligt gränssnitt för profilering av alla aspekter av en applikation: CPU Profiler för processoranalys, Memory Profiler för minneshantering, Network Profiler för nätverksförfrågningar och Energy Profiler för energiförbrukning. Data samlas in automatiskt när applikationen startas via Android Studio.
Profileraren fungerar både på emulatorn och på en fysisk enhet ansluten via USB. Enligt Google I/O 2023 används Android Profiler i mer än 70% av alla Android-projekt och betraktas som standardverktyget för prestandadiagnostik. Den största fördelen jämfört med tredjepartslösningar är noll integration: du behöver inte lägga till beroenden i build.gradle eller modifiera applikationskoden.
Arkitekturen för Android Profiler är baserad på Perfetto — systemspårningsverktyget i Android som samlar in data på kärn- och applikationsnivå. Perfetto säkerställer minimal overhead (mindre än 1% CPU) och stöder långtidsinspelning upp till 30 minuter. Detta gör det möjligt att profilera inte bara snabba operationer utan även långvariga scenarier — skärmövergångar, bakgrundssynkronisering, minnesförbrukning under en timmes användning.
Profileraren samlar in fyra typer av data: CPU — belastning per kärna och tråd, Memory — Java Heap, Native Heap, Stack, Graphics, Network — alla inkommande och utgående förfrågningar, Energy — energiförbrukningskategorier (Idle, Light, Medium, Heavy). Data är synkroniserade på en tidslinje — du kan samtidigt se hur CPU-förändringar påverkar Memory och energiförbrukning.
CPU Profiler visar processorbelastning i realtid på en tidslinje, uppdelad per applikationstråd. Varje tråd representeras av en färgad linje eller ett område — ju bredare område, desto mer processortid tar tråden. Röda områden indikerar applikationsarbete, blåa — systemanrop, gråa — väntan.
För detaljerad analys stöder CPU Profiler tre inspelningslägen: Trace Java Methods (spårning av alla Java-metoder), Trace C/C++ Functions (spårning av nativa NDK-funktioner) och Sample Java Methods (sampling, rekommenderat läge). Sampling ger lägst overhead och passar för daglig profilering, medan full spårning används för att hitta komplexa problem.
// Exempel: CPU Profiler-analys kommer att visa denna metod som flaskhals
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler kommer att visa hög CPU-belastning i inBackgroundThread
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// Rekommendation efter profilering:
// computeHeavyTransformation tar 80% av tiden — cachelagrar resultatet
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) } }
}
}
}
Efter inspelningen visar CPU Profiler Top-Down Tree — ett anropsträd med exekveringstid för varje metod. Var uppmärksam på kolumnen Self Time/Total: om Self Time för en metod överstiger 16 ms och den anropas från UI-tråden — är det en garanterad ramförlust. Lösningen är att flytta tunga beräkningar till en bakgrundstråd via Dispatchers.IO eller Default.
Sample Java Methods — rekommenderat läge för daglig profilering med 3–5% overhead. Trace Java Methods — full spårning av varje anrop, overhead upp till 15%, används för korta inspelningar (5–10 sekunder). Trace C/C++ Functions — spårning av NDK-kod via Linux Perf, oumbärlig för analys av spel och C++-bibliotek. Växla mellan lägen beroende på problemtyp.
Memory Profiler övervakar alla minneskategorier i applikationen: Java Heap (JVM-objekt), Native Heap (C/C++-allokeringar via JNI), Stack (trädstackar) och Graphics (texturer, GPU-buffertar). Huvudvisualiseringen är en tidsgraf över minnesförbrukning där varje kategori visas i sin egen färg. Om grafen inte sjunker efter skräpinsamling — misstänk en minnesläcka.
För att hitta läckor, använd funktionen Capture Heap Dump. Vid dumpningen stoppar Android Profiler applikationen i ~100 ms och skapar en HPROF-fil — en fullständig ögonblicksbild av alla levande Java Heap-objekt. Efter att dumpen har öppnats kan du sortera objekt efter Retained Size (mängden minne som frigörs när objektet tas bort) och leta efter instanser av Activity, Fragment eller Bitmap som borde ha förstörts.
Enligt Google I/O 2022 täcker Memory Profiler tillsammans med LeakCanary 95% av scenarierna för upptäckt av minnesläckor på Android. LeakCanary fungerar automatiskt — upptäcker läckor i bakgrunden. Memory Profiler behövs för manuell analys: du ser hela bilden av allokeringar, inte bara läckor.
| Minneskategori | Beskrivning | Typisk storlek |
|---|---|---|
| Java Heap | JVM-heap: Kotlin/Java-objekt | 5–200 MB |
| Native Heap | Allokeringar via JNI, NDK | 1–100 MB |
| Graphics | Texturer, GPU-buffertar | 10–200 MB |
| Stack | Alla trädstackar | 1–10 MB |
Efter att dumpen har tagits, sortera objekt efter Retained Size — detta är mängden minne som frigörs när objektet tas bort. Leta efter instanser av Activity, Fragment och Bitmap med stor Retained Size som inte borde finnas i minnet. Gå till fliken Reference Tree för att se kedjan av referenser som håller objektet vid liv — oftast är det ett statiskt fält i en singleton eller en orensad callback. En viktig mätvärde är Allocation rate (antal allokeringar per sekund). Om allocation rate överstiger 10 000 objekt/s lägger applikationen för mycket tid på att skapa och ta bort temporära objekt, vilket belastar GC och orsakar mikrohackningar. I så fall, använd View Inspector och hitta platser med frekvent objektskapande i loopar.
Network Profiler visar alla nätverksförfrågningar från applikationen i realtid på en tidslinje. Varje förfrågan visas som en horisontell stapel — dess längd motsvarar exekveringstiden, färgen anger typen av förfrågan (GET, POST, PUT, DELETE). Genom att bläddra i tidslinjen kan du se hur förfrågningarna är fördelade över tid och om de dupliceras.
Alla populära bibliotek stöds: OkHttp, Retrofit, Volley, Ktor. För Ktor och OkHttp visar profileraren hela anropskedjan inklusive avlyssnare (interceptors) och omvandlare. För varje förfrågan finns Request Headers och Response Headers, svarskropp (upp till 1 MB), statuskod och varaktighet.
Typiska problem som upptäcks med Network Profiler: avsaknad av cachning (samma URL begärs vid varje öppning), duplicerade förfrågningar (två komponenter laddar samma data samtidigt), överdriven svarsstorlek (servern skickar 5 MB när 50 KB behövs). Network Profiler hjälper dig att se sådana problem bokstavligen med en blick på tidslinjen.
För att emulera långsamma nätverk, använd Network Conditioning i Android Studio — det gör att du kan begränsa bandbredden till 3G/2G och lägga till fördröjning. Detta är avgörande för att testa applikationens beteende under dåliga nätverksförhållanden, särskilt för appar som används i regioner med instabil internetuppkoppling.
Energy Profiler bedömer applikationens påverkan på batteritiden baserat på Perfetto-data. Verktyget mäter inte faktisk förbrukning i milliampere, utan klassificerar varje operation i en av fem energiförbrukningskategorier: Idle, Light, Medium, High och Overloaded. Tidslinjen i Energy Profiler är färgkodad: grön (lätt belastning), gul (medel), röd (hög).
De främsta orsakerna till röda zoner: WakeLock (applikationen håller processorn aktiv), Location GPS (ständiga positionsförfrågningar med hög precision), Keep-Alive-anslutningar (frekvent datautbyte med servern), stora dataöverföringar (filuppladdning, streaming). Energy Profiler visar exakt vilken operation som vid vilken tidpunkt orsakade energitoppen.
Enligt Android Developers bör en typisk applikation inte tillbringa mer än 5% av tiden i kategorin High. Om Energy Profiler visar röda zoner längre än 10% av profilerings tiden — kommer applikationen inte att klara granskningen avseende batteridränering. Rekommendationen är att använda WorkManager för bakgrundsuppgifter, begränsa Location-förfrågningar till minimalt nödvändig precision och samla nätverksförfrågningar i batcher.
Start av Android Profiler görs med ett klick: i Android Studio, öppna View → Tool Windows → Profiler eller dubbelklicka på Profiler-ikonen i den högra panelen. När applikationen startar på den anslutna enheten ansluter Android Studio automatiskt till processen och börjar samla in data. På tidslinjen visas omedelbart grafer för CPU, Memory, Network och Energy.
För detaljerad analys, välj önskad flik (CPU, Memory, Network eller Energy) och börja inspelningen. För CPU rekommenderar jag läget Sample Java Methods med en inspelningslängd på 30 sekunder — detta räcker för ett typiskt scenario. För Memory — ta en heapdump efter att scenariot har körts (Capture Heap Dump). För Network startas inspelningen automatiskt, det räcker att trycka på Stop-knappen efter att scenariot är klart.
Efter att inspelningen har stoppats, exportera data: File → Save As sparar hela sessionen i en .perf-fil. Detta är praktiskt för att jämföra mätvärden före och efter optimering. Skapa en baslinjesession på den första stabila versionen och jämför varje ny session med den — detta är det enda sättet att objektivt utvärdera prestandaförändringar.
Android Profiler kan köras från kommandoraden via Android Studio CLI och Firebase Test Lab. Firebase Test Lab stöder prestandaprofilering som en del av UI-tester: du får mätvärden för CPU, Memory och Network tillsammans med testresultatet. Konfigurera pipeline så att när mätvärdena sjunker med 10% jämfört med baslinjen blockeras CI-pipelinen tills utvecklaren har granskat.
Vanliga frågor
Påverkan är minimal. Android Profiler använder Perfetto för datainsamling, vilket tillför mindre än 1% CPU-overhead. I läget Sample Java Methods är overheaden cirka 3–5%, vilket är försumbart för scenariobaserad profilering. Full metodspårning kan ge upp till 15% overhead, därför används den endast för korta inspelningar.
Ja, systemspårningar kan spelas in via Perfetto CLI direkt från enheten: adb shell perfetto --out /data/local/tmp/trace.perf. Öppna sedan filen i Perfetto UI (ui.perfetto.dev) eller importera den i Android Studio för visning med full applikationsmärkning.
Android Profiler är ett systemverktyg som inte kräver proxykonfiguration. Det visar förfrågningar direkt i IDE i prestandakontext. Charles Proxy är en extern proxyserver som ger mer detaljerad analys (trafikavlyssning, ändring av förfrågningar, återsändning). För prestandaprofilering, använd Android Profiler; för API-kontraktsanalys, använd Charles.
Ta en heapdump före scenariot (t.ex. innan du öppnar en Activity). Kör scenariot — öppna Activity och stäng den. Ta en andra dump. Jämför antalet levande Activity-instanser: om det finns fler i den andra dumpen — minnesläcka. Sortera efter Retained Size, hitta överflödiga Activity-instanser och titta på Reference Tree för att fastställa orsaken.
Energy Profiler kräver stöd för Power Profiles på enhetsnivå och Android 8.0+. På emulatorer och vissa ROM-versioner (särskilt kinesiska) kan data saknas. Lösningen är att profilera energiförbrukning på referensenheter som Pixel eller Samsung med ren Android-ROM.
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å