Android Profiler — је уграђени скуп алата у Android Studio за праћење перформанси апликација у реалном времену. Омогућава праћење оптерећења CPU-а, потрошње меморије, мрежног саобраћаја и потрошње енергије без инсталације спољних библиотека. Према Android Developers, профилер је интегрисан директно у IDE и пружа метрике са прецизношћу до милисекунде за сваки процес на повезаном уређају.
Главно
Android Profiler — је компонента Android Studio која је заменила застареле Android Monitor и DDMS. Пружа јединствени интерфејс за профилисање свих аспеката апликације: CPU Profiler за анализу процесора, Memory Profiler за рад са меморијом, Network Profiler за мрежне захтеве и Energy Profiler за потрошњу енергије. Подаци се прикупљају аутоматски при покретању апликације кроз Android Studio.
Профилер ради и на емулатору и на физичком уређају повезаном преко USB-а. Према подацима Google I/O 2023, Android Profiler се користи у преко 70% Android пројеката и сматра се стандардним алатом за дијагностику перформанси. Главна предност у односу на спољна решења — нулта интеграција: није потребно додавати зависности у build.gradle или мењати код апликације.
Архитектура Android Profiler-а је изграђена на Perfetto — системском трасеру Android-а који прикупља податке на нивоу језгра и апликације. Perfetto обезбеђује минимално оптерећење (мање од 1% CPU) и подржава дуготрајно снимање до 30 минута. Ово омогућава профилисање не само брзих операција, већ и дугих сценарија — прелаза између екрана, позадинске синхронизације, потрошње меморије током сат времена коришћења.
Профилер прикупља четири врсте података: CPU — оптерећење сваког језгра и нити, Memory — Java Heap, Native Heap, Stack, Graphics, Network — све долазне и одлазне захтеве, Energy — категорије потрошње енергије (Idle, Light, Medium, Heavy). Подаци су синхронизовани на временској оси — можете истовремено видети како промена CPU-а утиче на меморију и потрошњу енергије.
CPU Profiler приказује оптерећење процесора у реалном времену на временској оси, подељено по нитима апликације. Свака нит је представљена обојеном линијом или облашћу — што је област шира, то нит заузима више процесорског времена. Црвене области означавају рад апликације, плаве — системске позиве, сиве — чекање.
За детаљну анализу CPU Profiler подржава три режима снимања: Trace Java Methods (трасирање свих Java метода), Trace C/C++ Functions (трасирање изворних NDK функција) и Sample Java Methods (узорковање, препоручени режим). Узорковање даје најмање оптерећење и погодно је за свакодневно профилисање, а потпуно трасирање — за проналажење сложених проблема.
// Пример: анализа CPU Profiler-а ће показати овај метод као bottleneck
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler ће показати високо оптерећење CPU-а у inBackgroundThread
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// Препорука након профилисања:
// computeHeavyTransformation заузима 80% времена — кеширамо резултат
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) } }
}
}
}
Након снимања, CPU Profiler приказује Top-Down Tree — стабло позива са временом извршења сваког метода. Обратите пажњу на колону Self Time/Total: ако Self Time метода прелази 16 ms и позива се из UI нити — то је гарантовано пропуштање оквира. Решење — преместите тешка израчунавања у позадинску нит кроз Dispatchers.IO или Default.
Sample Java Methods — препоручени режим за свакодневно профилисање са оптерећењем 3–5%. Trace Java Methods — потпуно трасирање сваког позива, оптерећење до 15%, користи се за кратка снимања (5–10 секунди). Trace C/C++ Functions — трасирање NDK кода кроз Linux Perf, незаменљив за анализу игара и библиотека у C++. Мењајте режиме у зависности од врсте проблема.
Memory Profiler прати све категорије меморије апликације: Java Heap (JVM објекти), Native Heap (C/C++ алокације преко JNI), Stack (стогови нити) и Graphics (текстуре, GPU бафери). Главна визуелизација — временски график потрошње меморије, где је свака категорија приказана својом бојом. Ако график не опада након сакупљања отпада (GC) — сумњајте на цурење.
За проналажење цурења користите функцију Capture Heap Dump. У тренутку дампа, Android Profiler зауставља апликацију на ~100 ms и креира HPROF датотеку — потпуни снимак свих живих објеката у Java Heap-у. Након отварања дампа, можете сортирати објекте по Retained Size (обим меморије који ће се ослободити при уклањању објекта) и тражити инстанце Activity, Fragment или Bitmap које су требале бити уништене.
Према подацима Google I/O 2022, Memory Profiler у комбинацији са LeakCanary покрива 95% сценарија откривања цурења меморије на Android-у. LeakCanary ради аутоматски — открива цурење у позадини. Memory Profiler је потребан за ручну анализу: видите потпуну слику алокација, а не само цурења.
| Категорија меморије | Опис | Типична величина |
|---|---|---|
| Java Heap | JVM хрпа: Kotlin/Java објекти | 5–200 MB |
| Native Heap | Алокације преко JNI, NDK | 1–100 MB |
| Graphics | Текстуре, GPU бафери | 10–200 MB |
| Stack | Стогови свих нити | 1–10 MB |
Након преузимања дампа, сортирајте објекте по Retained Size — то је обим меморије који ће се ослободити при уклањању објекта. Тражите инстанце Activity, Fragment и Bitmap са великим Retained Size које не би требало да буду у меморији. Пређите на картицу Reference Tree да видите ланац референци које држе објекат — најчешће је то статичко поље синглтона или неочишћени колбек. Важна метрика — Allocation rate (број алокација у секунди). Ако allocation rate прелази 10 000 објеката/с, апликација троши превише времена на креирање и уклањање привремених објеката, што оптерећује GC и изазива микро-застоје. У том случају користите алатку View Inspector и пронађите места са честим креирањем објеката у петљама.
Network Profiler приказује све мрежне захтеве апликације у реалном времену на временској оси. Сваки захтев се приказује као хоризонтална трака — њена дужина одговара времену извршења, боја — типу захтева (GET, POST, PUT, DELETE). Померање осе омогућава да видите како су захтеви распоређени у времену и да ли се дуплирају.
Подржане су све популарне библиотеке: OkHttp, Retrofit, Volley, Ktor. За Ktor и OkHttp, профилер приказује комплетан стек позива, укључујући пресретаче (интерцепторе) и конверторе. За сваки захтев су доступна Request Headers и Response Headers, тело одговора (до 1 MB), статусни код и трајање.
Типични проблеми које открива Network Profiler: недостатак кеширања (исти URL се захтева при сваком отварању), дуплирани захтеви (две компоненте истовремено учитавају исте податке), прекомерна величина одговора (сервер шаље 5 MB када је потребно 50 KB). Network Profiler помаже да се такви проблеми виде буквално једним погледом на временску осу.
За емулацију спорих мрежа користите Network Conditioning у Android Studio — омогућава ограничавање пропусног опсега на 3G/2G и додавање кашњења. Ово је критично за тестирање понашања апликације у лошим мрежним условима, посебно за апликације које раде у регионима са нестабилним интернетом.
Energy Profiler процењује утицај апликације на пуњење батерије на основу Perfetto података. Алатка не мери стварну потрошњу у милиамперима, већ класификује сваку операцију у једну од пет категорија потрошње енергије: Idle, Light, Medium, High и Overloaded. Временска оса Energy Profiler-а је осветљена бојом: зелена (лако оптерећење), жута (средње), црвена (високо).
Главни узроци појаве црвених зона: WakeLock (апликација држи процесор активним), Location GPS (константни захтеви за координатама са високом прецизношћу), Keep-Alive везе (честа размена података са сервером), велики преноси података (слање датотека, стриминг). Energy Profiler тачно показује која је операција и у ком тренутку изазвала врхунац потрошње енергије.
Према Android Developers, типична апликација не би требало да проводи више од 5% времена у категорији High. Ако Energy Profiler приказује црвене зоне дуже од 10% времена профилисања — апликација неће проћи ревизију по критеријуму Battery Drain. Препорука — користите WorkManager за позадинске задатке, ограничите Location захтеве на минимално потребну прецизност и агрегирајте мрежне захтеве у бачеве.
Покретање Android Profiler-а се врши једним кликом: у Android Studio отворите View → Tool Windows → Profiler или двапут кликните на иконицу Profiler у десном панелу. Након покретања апликације на повезаном уређају, Android Studio ће се аутоматски повезати са процесом и почети прикупљање података. На временској оси ће се одмах појавити графици CPU, Memory, Network и Energy.
За детаљну анализу изаберите одговарајућу картицу (CPU, Memory, Network или Energy) и започните снимање. За CPU препоручујем режим Sample Java Methods са трајањем снимања од 30 секунди — то је довољно за типичан сценарио. За Memory — дамп хрпе након извршења сценарија (Capture Heap Dump). За Network снимање почиње аутоматски, довољно је притиснути дугме Stop након завршетка сценарија.
Након заустављања снимања, извезите податке: File → Save As чува целу сесију у .perf датотеци. Ово је згодно за поређење метрика пре и после оптимизације. Направите baseline сесију на првој стабилној верзији и поредите сваку нову сесију са њом — то је једини начин да објективно процените промене перформанси.
Android Profiler се може покренути из командне линије преко Android Studio CLI и Firebase Test Lab. Firebase Test Lab подржава профилисање перформанси као део UI тестова: добијате метрике CPU, Memory и Network заједно са резултатом теста. Подесите pipeline тако да при паду метрика за 10% у односу на baseline, CI pipeline буде блокиран до провере од стране програмера.
Често постављана питања
Утицај је минималан. Android Profiler користи Perfetto за прикупљање података, који додаје мање од 1% оптерећења CPU-а. У режиму Sample Java Methods оптерећење је око 3–5%, што је занемарљиво за профилисање сценарија. Потпуно трасирање метода може дати оптерећење до 15%, због чега се користи само за кратка снимања.
Да, системски трагови се могу снимити директно са уређаја преко Perfetto CLI: adb shell perfetto --out /data/local/tmp/trace.perf. Затим отворите датотеку у Perfetto UI интерфејсу (ui.perfetto.dev) или увезите у Android Studio за преглед са комплетним означавањем апликације.
Android Profiler — је системска алатка која не захтева подешавање проксија. Приказује захтеве директно у IDE у контексту перформанси. Charles Proxy — спољни прокси сервер који пружа детаљнију анализу (пресретање саобраћаја, измена захтева, поновно слање). За профилисање перформанси користите Android Profiler, за анализу API уговора — Charles.
Направите дамп хрпе пре извршења сценарија (нпр. пре отварања Activity). Извршите сценарио — отворите Activity и затворите је. Направите други дамп. Упоредите број живих инстанци Activity: ако их је у другом дампу више — цурење. Сортирајте по Retained Size, пронађите вишак Activity и погледајте Reference Tree да бисте утврдили узрок.
Energy Profiler захтева подршку Power Profiles на нивоу уређаја и Android 8.0+. На емулаторима и неким фирмверима (посебно кинеским) подаци могу изостати. Решење — профилишите потрошњу енергије на референтним Pixel или Samsung уређајима са чистим Android фирмвером.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође