Android Profiler — egy beépített eszközkészlet az Android Studio-ban az alkalmazások teljesítményének valós idejű monitorozására. Lehetővé teszi a CPU-terhelés, memóriafogyasztás, hálózati forgalom és energiafogyasztás nyomon követését külső könyvtárak telepítése nélkül. A Android Developers szerint a profilozó közvetlenül az IDE-be van integrálva, és ezredmásodperc pontosságú mérőszámokat biztosít bármely folyamathoz a csatlakoztatott eszközön.
Főbb pontok
Android Profiler — az Android Studio egyik összetevője, amely felváltotta az elavult Android Monitor-t és DDMS-t. Egységes felületet biztosít az alkalmazás minden aspektusának profilozásához: CPU Profiler a processzor elemzéséhez, Memory Profiler a memóriával való munkához, Network Profiler a hálózati kérésekhez és Energy Profiler az energiafogyasztáshoz. Az adatok automatikusan gyűlnek össze az alkalmazás Android Studio-n keresztüli indításakor.
A profilozó működik az emulátoron és a USB-n keresztül csatlakoztatott fizikai eszközön is. A Google I/O 2023 adatai szerint az Android Profiler-t az Android projektek több mint 70%-ában használják, és a teljesítménydiagnosztika szabványos eszközének tekintik. A külső megoldásokkal szembeni fő előny — nulla integráció: nem kell függőségeket hozzáadni a build.gradle-hez vagy módosítani az alkalmazás kódját.
Az Android Profiler architektúrája a Perfetto — Android rendszerkövető, amely mag- és alkalmazásszinten gyűjti az adatokat — alapjaira épül. A Perfetto minimális terhelést biztosít (kevesebb mint 1% CPU), és támogatja a hosszú távú, akár 30 perces rögzítést. Ez lehetővé teszi nemcsak a gyors műveletek, hanem a hosszú forgatókönyvek — képernyők közötti átmenetek, háttérszinkronizálás, memóriahasználat egy óra használat során — profilozását is.
A profilozó négy típusú adatot gyűjt: CPU — az egyes magok és szálak terhelése, Memory — Java Heap, Native Heap, Stack, Graphics, Network — az összes bejövő és kimenő kérés, Energy — energiafogyasztási kategóriák (Idle, Light, Medium, Heavy). Az adatok az idővonalon szinkronizálva vannak — egyszerre láthatja, hogy a CPU változása hogyan befolyásolja a memóriát és az energiafogyasztást.
CPU Profiler valós időben mutatja a processzor terhelését az idővonalon, az alkalmazás szálai szerint felosztva. Minden szálat egy színes vonal vagy terület képvisel — minél szélesebb a terület, annál több processzoridőt foglal el a szál. A piros területek az alkalmazás működését, a kékek — rendszerhívásokat, a szürkék — várakozást jelentenek.
A részletes elemzéshez a CPU Profiler három rögzítési módot támogat: Trace Java Methods (az összes Java metódus követése), Trace C/C++ Functions (natív NDK függvények követése) és Sample Java Methods (mintavételezés, ajánlott mód). A mintavételezés adja a legkisebb terhelést, és alkalmas a napi profilozásra, míg a teljes követés az összetett problémák megtalálására szolgál.
// Példa: a CPU Profiler elemzés ezt a metódust bottleneck-ként fogja mutatni
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// A CPU Profiler magas CPU-terhelést mutat az inBackgroundThread-ben
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// Javaslat profilozás után:
// A computeHeavyTransformation az idő 80%-t veszi igénybe — gyorsítótárazzuk az eredményt
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) } }
}
}
}
A rögzítés után a CPU Profiler megjeleníti a Top-Down Tree — hívásfát az egyes metódusok végrehajtási idejével. Figyeljen a Self Time/Total oszlopra: ha egy metódus Self Time értéke meghaladja a 16 ms-t és a UI szálból hívódik — ez garantált képkocka kihagyás. Megoldás — a nehéz számítások áthelyezése háttérszálba a Dispatchers.IO vagy Default segítségével.
Sample Java Methods — ajánlott mód napi profilozáshoz 3–5% terheléssel. Trace Java Methods — minden hívás teljes követése, akár 15% terhelés, rövid felvételekhez használatos (5–10 másodperc). Trace C/C++ Functions — NDK kód követése Linux Perf segítségével, nélkülözhetetlen játékok és C++ könyvtárak elemzéséhez. Váltson módot a probléma típusától függően.
Memory Profiler követi az alkalmazás összes memóriakategóriáját: Java Heap (JVM objektumok), Native Heap (C/C++ foglalások JNI-n keresztül), Stack (szálvermek) és Graphics (textúrák, GPU pufferek). A fő vizualizáció — a memóriafogyasztás időbeli grafikonja, ahol minden kategória a saját színével van jelölve. Ha a grafikon nem csökken a szemétgyűjtés (GC) után — gyanítson szivárgást.
A szivárgások kereséséhez használja a Capture Heap Dump funkciót. A dump pillanatában az Android Profiler ~100 ms-ra leállítja az alkalmazást, és létrehoz egy HPROF fájlt — a Java Heap összes élő objektumának teljes pillanatképét. A dump megnyitása után az objektumokat Retained Size (a objektum törlésekor felszabaduló memória mennyisége) szerint rendezheti, és kereshet olyan Activity, Fragment vagy Bitmap példányokat, amelyeknek meg kellett volna semmisülniük.
A Google I/O 2022 adatai szerint a Memory Profiler a LeakCanary-val kombinálva az Android memóriaszivárgás-észlelési forgatókönyveinek 95%-át lefedi. A LeakCanary automatikusan működik — észleli a szivárgást a háttérben. A Memory Profiler a kézi elemzéshez szükséges: nemcsak a szivárgásokat látja, hanem a foglalások teljes képét is.
| Memória kategória | Leírás | Jellemző méret |
|---|---|---|
| Java Heap | JVM kupac: Kotlin/Java objektumok | 5–200 MB |
| Native Heap | Foglalások JNI-n, NDK-n keresztül | 1–100 MB |
| Graphics | Textúrák, GPU pufferek | 10–200 MB |
| Stack | Az összes szál verme | 1–10 MB |
A dump rögzítése után rendezze az objektumokat Retained Size szerint — ez az a memória mennyiség, amely az objektum törlésekor felszabadul. Keressen nagy Retained Size-tel rendelkező Activity, Fragment és Bitmap példányokat, amelyeknek nem kellene a memóriában lenniük. Lépjen a Reference Tree fülre, hogy lássa az objektumot tartó hivatkozási láncot — leggyakrabban ez egy singleton statikus mezője vagy egy meg nem tisztított callback. Fontos mérőszám — Allocation rate (foglalások száma másodpercenként). Ha az allocation rate meghaladja a 10 000 objektum/mp értéket, az alkalmazás túl sok időt tölt ideiglenes objektumok létrehozásával és törlésével, ami terheli a GC-t és mikroakadásokat okoz. Ebben az esetben használja a View Inspector eszközt, és keresse meg a gyakori objektumlétrehozás helyeit a ciklusokban.
Network Profiler valós időben jeleníti meg az alkalmazás összes hálózati kérését az idővonalon. Minden kérés vízszintes sávként jelenik meg — hossza a végrehajtási időnek, színe a kérés típusának (GET, POST, PUT, DELETE) felel meg. Az idővonal görgetése lehetővé teszi, hogy lássa, hogyan oszlanak el a kérések az időben, és hogy duplikálódnak-e.
Minden népszerű könyvtár támogatott: OkHttp, Retrofit, Volley, Ktor. A Ktor és OkHttp esetében a profilozó a teljes hívási vermet mutatja, beleértve az elfogókat (interceptorokat) és konvertereket. Minden kéréshez elérhetők a Request Headers és Response Headers, a válasz törzse (akár 1 MB), az állapotkód és az időtartam.
A Network Profiler által észlelt tipikus problémák: gyorsítótárazás hiánya (ugyanaz az URL minden megnyitáskor lekérdeződik), duplikálódó kérések (két összetevő egyszerre tölti be ugyanazokat az adatokat), túlzott válaszméret (a szerver 5 MB-ot küld, amikor 50 KB-ra lenne szükség). A Network Profiler segít, hogy ezeket a problémákat szó szerint egy pillantással lássa az idővonalon.
A lassú hálózatok emulálásához használja a Network Conditioning funkciót az Android Studio-ban — ez lehetővé teszi a sávszélesség 3G/2G-re korlátozását és késleltetés hozzáadását. Ez kritikus fontosságú az alkalmazás viselkedésének teszteléséhez rossz hálózati körülmények között, különösen az instabil internetű régiókban működő alkalmazások esetében.
Energy Profiler a Perfetto adatai alapján értékeli az alkalmazás hatását az akkumulátor töltöttségére. Az eszköz nem méri a tényleges fogyasztást milliamperben, hanem minden műveletet az energiafogyasztás öt kategóriájának egyikébe sorol: Idle, Light, Medium, High és Overloaded. Az Energy Profiler idővonala színnel van kiemelve: zöld (könnyű terhelés), sárga (közepes), piros (magas).
A piros zónák megjelenésének fő okai: WakeLock (az alkalmazás aktívan tartja a processzort), Location GPS (állandó koordináta-kérések nagy pontossággal), Keep-Alive kapcsolatok (gyakori adatcsere a szerverrel), nagy adatátvitelek (fájlküldés, streamelés). Az Energy Profiler pontosan megmutatja, melyik művelet és mikor okozott energiafogyasztási csúcsot.
A Android Developers szerint egy tipikus alkalmazás nem tölthet több mint 5% időt a High kategóriában. Ha az Energy Profiler a profilozási idő több mint 10%-ában piros zónákat mutat — az alkalmazás nem megy át a Battery Drain kritérium szerinti felülvizsgálaton. Javaslat — használja a WorkManager-t háttérfeladatokhoz, korlátozza a Location kéréseket a minimálisan szükséges pontosságra, és aggregálja a hálózati kéréseket batch-ekbe.
Az Android Profiler elindítása egy kattintással történik: az Android Studio-ban nyissa meg a View → Tool Windows → Profiler menüt, vagy kattintson duplán a Profiler ikonra a jobb oldali panelen. Miután az alkalmazás elindult a csatlakoztatott eszközön, az Android Studio automatikusan csatlakozik a folyamathoz, és megkezdi az adatgyűjtést. Az idővonalon azonnal megjelennek a CPU, Memory, Network és Energy grafikonok.
A részletes elemzéshez válassza ki a kívánt lapot (CPU, Memory, Network vagy Energy), és kezdje el a rögzítést. CPU esetén a Sample Java Methods módot ajánlom 30 másodperces rögzítési idővel — ez elegendő egy tipikus forgatókönyvhöz. Memory esetén — kupac dump a forgatókönyv végrehajtása után (Capture Heap Dump). Network esetén a rögzítés automatikusan indul, elég megnyomni a Stop gombot a forgatókönyv befejezése után.
A rögzítés leállítása után exportálja az adatokat: a File → Save As az egész munkamenetet egy .perf fájlba menti. Ez kényelmes a metrikák optimalizálás előtti és utáni összehasonlításához. Hozzon létre egy alapvonal (baseline) munkamenetet az első stabil verzióban, és hasonlítsa össze vele minden új munkamenetet — ez az egyetlen módja a teljesítményváltozások objektív értékelésének.
Az Android Profiler parancssorból is elindítható az Android Studio CLI és a Firebase Test Lab segítségével. A Firebase Test Lab támogatja a teljesítményprofilozást az UI tesztek részeként: a CPU, Memory és Network metrikákat a teszt eredményével együtt kapja meg. Konfigurálja a pipeline-t úgy, hogy a metrikák 10%-os csökkenése esetén az alapvonalhoz képest a CI pipeline blokkolva legyen a fejlesztő általi ellenőrzésig.
Gyakran ismételt kérdések
A hatás minimális. Android Profiler a Perfetto-t használja az adatgyűjtéshez, amely kevesebb mint 1% CPU-többletterhelést ad. Sample Java Methods módban a terhelés körülbelül 3–5%, ami elhanyagolható a forgatókönyv-profilozáshoz. A metódusok teljes követése akár 15% terhelést is okozhat, ezért csak rövid felvételekhez használják.
Igen, a rendszernyomok közvetlenül az eszközről rögzíthetők a Perfetto CLI segítségével: adb shell perfetto --out /data/local/tmp/trace.perf. Ezután nyissa meg a fájlt a Perfetto UI (ui.perfetto.dev) felületén, vagy importálja Android Studio-ba a teljes alkalmazás-jelöléssel történő megtekintéshez.
Android Profiler — egy rendszereszköz, amely nem igényel proxy konfigurációt. Közvetlenül az IDE-ben mutatja a kéréseket a teljesítmény kontextusában. Charles Proxy — egy külső proxy szerver, amely részletesebb elemzést biztosít (forgalom elfogása, kérések módosítása, újraküldés). Teljesítményprofilozáshoz használja az Android Profiler-t, API-szerződések elemzéséhez — a Charles-t.
Készítsen kupac dump-ot a forgatókönyv végrehajtása előtt (például az Activity megnyitása előtt). Hajtsa végre a forgatókönyvet — nyissa meg az Activity-t, majd zárja be. Készítsen egy második dump-ot. Hasonlítsa össze az élő Activity példányok számát: ha a második dump-ban több van — szivárgás. Rendezze Retained Size szerint, találja meg a felesleges Activity-ket, és nézze meg a Reference Tree-t az ok megállapításához.
Energy Profiler Power Profiles támogatást igényel eszközszinten és Android 8.0+-t. Emulátorokon és egyes firmware-eken (különösen kínai) az adatok hiányozhatnak. Megoldás — profilozza az energiafogyasztást referencia Pixel vagy Samsung eszközökön tiszta Android firmware-rel.
Összegzés
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