Android Profiler: що це, можливості CPU, Memory та Network

Автор: IT Sectr Опубліковано: 2026-03-30 Час читання: 9 хв

Android Profiler — це вбудований в Android Studio набір інструментів для моніторингу продуктивності застосунків у реальному часі. Він дозволяє відстежувати завантаження CPU, споживання пам'яті, мережевий трафік та енергоспоживання без встановлення сторонніх бібліотек. За даними Android Developers, профілювальник інтегрований безпосередньо в IDE та надає метрики з точністю до мілісекунди для будь-якого процесу на підключеному пристрої.

Головне

  • Android Profiler — вбудований профілювальник Android Studio для CPU, Memory, Network та Energy.
  • CPU Profiler показує завантаження процесора за потоками з точним деревом викликів методів.
  • Memory Profiler відстежує Java Heap, Native Heap та Graphics Memory у реальному часі.
  • Network Profiler фіксує кожен HTTP-запит із розміром, тривалістю та заголовками.
  • Energy Profiler виявляє операції, які надмірно розряджають батарею пристрою.

Що таке Android Profiler?

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 хвилин. Це дозволяє профілювати не тільки швидкі операції, але й тривалі сценарії — переходи між екранами, фонову синхронізацію, споживання пам'яті за годину використання.

Які дані збирає Android Profiler

Профілювальник збирає чотири типи даних: CPU — завантаження кожного ядра та потоку, Memory — Java Heap, Native Heap, Stack, Graphics, Network — всі вхідні та вихідні запити, Energy — категорії енергоспоживання (Idle, Light, Medium, Heavy). Дані синхронізовані за часовою шкалою — можна одночасно бачити, як зміна CPU впливає на Memory та енергоспоживання.

CPU Profiler: аналіз процесора та потоків

CPU Profiler показує завантаження процесора в реальному часі на часовій шкалі, розбиту за потоками застосунку. Кожен потік представлений кольоровою лінією або областю — чим ширша область, тим більше процесорного часу займає потік. Області червоного кольору означають роботу застосунку, синього — системні виклики, сірого — очікування.

Для детального аналізу CPU Profiler підтримує три режими запису: Trace Java Methods (трасування всіх методів Java), Trace C/C++ Functions (трасування нативних функцій NDK) та Sample Java Methods (семплювання, рекомендований режим). Семплювання дає найменше навантаження та підходить для щоденного профілювання, а повне трасування — для пошуку складних проблем.

kotlin
// Приклад: аналіз 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 мс і він викликається з UI-потоку — це гарантований пропуск кадру. Рішення — перенести важкі обчислення у фоновий потік через Dispatchers.IO або Default.

Режими трасування CPU

Sample Java Methods — рекомендований режим для щоденного профілювання з навантаженням 3–5%. Trace Java Methods — повне трасування кожного виклику, навантаження до 15%, використовується для коротких записів (5–10 секунд). Trace C/C++ Functions — трасування NDK-коду через Linux Perf, незамінний для аналізу ігор та бібліотек на C++. Перемикайте режими залежно від типу проблеми.

Memory Profiler: робота з пам'яттю та пошук витоків

Memory Profiler відстежує всі категорії пам'яті застосунку: Java Heap (об'єкти JVM), Native Heap (алокації C/C++ через JNI), Stack (стеки потоків) та Graphics (текстури, буфери GPU). Основна візуалізація — часовий графік споживання пам'яті, де кожна категорія показана своїм кольором. Якщо графік не знижується після збирання сміття — підозрюйте витік.

Для пошуку витоків використовуйте функцію Capture Heap Dump. У момент дампу Android Profiler зупиняє застосунок на ~100 мс і створює HPROF-файл — повний знімок усіх живих об'єктів Java Heap. Після відкриття дампу ви можете сортувати об'єкти за Retained Size (об'єм пам'яті, який звільниться при видаленні об'єкта) та шукати екземпляри Activity, Fragment або Bitmap, які мали бути знищені.

За даними Google I/O 2022, Memory Profiler у зв'язці з LeakCanary покриває 95% сценаріїв виявлення витоків пам'яті на Android. LeakCanary працює автоматично — виявляє витік у фоні. Memory Profiler потрібен для ручного аналізу: ви бачите повну картину алокацій, а не тільки витоки.

Категорія пам'ятіОписТиповий розмір
Java HeapКуча JVM: об'єкти Kotlin/Java5–200 MB
Native HeapАлокації через JNI, NDK1–100 MB
GraphicsТекстури, буфери GPU10–200 MB
StackСтеки всіх потоків1–10 MB

Як інтерпретувати HPROF дамп

Після захоплення дампу сортуйте об'єкти за Retained Size — це об'єм пам'яті, який звільниться при видаленні об'єкта. Шукайте екземпляри Activity, Fragment та Bitmap з великим Retained Size, які не повинні перебувати в пам'яті. Перейдіть на вкладку Reference Tree, щоб побачити ланцюжок посилань, що утримують об'єкт — найчастіше це статичне поле сінглтона або неочищений callback. Важлива метрика — Allocation rate (кількість алокацій за секунду). Якщо allocation rate перевищує 10 000 об'єктів/с, застосунок витрачає занадто багато часу на створення та видалення тимчасових об'єктів, що навантажує GC та викликає мікрофризи. У цьому випадку використовуйте інструмент View Inspector та знайдіть місця з частим створенням об'єктів у циклах.

Network Profiler: моніторинг мережевих запитів

Network Profiler відображає всі мережеві запити застосунку в реальному часі на часовій шкалі. Кожен запит показується у вигляді горизонтальної смуги — її довжина відповідає часу виконання, колір — типу запиту (GET, POST, PUT, DELETE). Прокрутка шкали дозволяє побачити, як запити розподілені в часі та чи не дублюються вони.

Підтримуються всі популярні бібліотеки: OkHttp, Retrofit, Volley, Ktor. Для Ktor та OkHttp профілювальник показує повний стек викликів, включаючи перехоплювачі (interceptors) та перетворювачі. Для кожного запиту доступні Заголовки запиту та Заголовки відповіді, тіло відповіді (до 1 MB), код статусу та тривалість.

Типові проблеми, які виявляє Network Profiler: відсутність кешування (той самий URL запитується при кожному відкритті), дубльовані запити (два компоненти одночасно завантажують однакові дані), надмірний розмір відповіді (сервер віддає 5 MB, коли потрібно 50 KB). Network Profiler допомагає побачити такі проблеми буквально за один погляд на часову шкалу.

Для емуляції повільних мереж використовуйте Network Conditioning в Android Studio — він дозволяє обмежити пропускну здатність до 3G/2G та додати затримку. Це критично важливо для тестування поведінки застосунку в поганих мережевих умовах, особливо для застосунків, що працюють у регіонах з нестабільним інтернетом.

Energy Profiler: аналіз енергоспоживання

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 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-сеанс на першій стабільній версії та порівнюйте з ним кожен новий сеанс — це єдиний спосіб об'єктивно оцінити зміни продуктивності.

Автоматизація профілювання в CI

Android Profiler можна запускати з командного рядка через Android Studio CLI та Firebase Test Lab. Firebase Test Lab підтримує профілювання продуктивності як частину UI-тестів: ви отримуєте метрики CPU, Memory та Network разом з результатом тесту. Налаштуйте пайплайн так, щоб при падінні метрик на 10% відносно baseline CI-пайплайн блокувався до перевірки розробником.

Поширені запитання

Чи сповільнює Android Profiler роботу застосунку?

Вплив мінімальний. Android Profiler використовує Perfetto для збору даних, який додає менше 1% навантаження CPU. У режимі Sample Java Methods навантаження становить близько 3–5%, що несуттєво для сценарного профілювання. Повне трасування методів може давати навантаження до 15%, тому його використовують тільки для коротких записів.

Чи можна профілювати застосунок без Android Studio?

Так, системні траси можна записати через Perfetto CLI безпосередньо з пристрою: adb shell perfetto --out /data/local/tmp/trace.perf. Потім відкрийте файл в інтерфейсі Perfetto UI (ui.perfetto.dev) або імпортуйте в Android Studio для перегляду з повною розміткою застосунку.

Чим Network Profiler відрізняється від Charles Proxy?

Android Profiler — це системний інструмент, який не потребує налаштування проксі. Показує запити прямо в IDE в контексті продуктивності. Charles Proxy — зовнішній проксі-сервер, що надає більш детальний аналіз (перехоплення трафіку, зміна запитів, повторне відправлення). Для профілювання продуктивності використовуйте Android Profiler, для аналізу API-контрактів — Charles.

Як знайти витік пам'яті через Memory Profiler?

Зробіть дамп купі до виконання сценарію (наприклад, до відкриття Activity). Виконайте сценарій — відкрийте Activity та закрийте її. Зробіть другий дамп. Порівняйте кількість живих екземплярів Activity: якщо в другому дампі їх більше — витік. Сортуйте за Retained Size, знайдіть зайві Activity та подивіться Reference Tree для з'ясування причини.

Чому Energy Profiler недоступний на деяких пристроях?

Energy Profiler потребує підтримки Power Profiles на рівні пристрою та Android 8.0+. На емуляторах та деяких прошивках (особливо китайських) дані можуть бути відсутні. Рішення — профілювати енергоспоживання на еталонних пристроях Pixel або Samsung з чистою прошивкою Android.

Підсумки

  • Android Profiler — вбудований профілювальник Android Studio для моніторингу CPU, Memory, Network та Energy.
  • CPU Profiler аналізує завантаження ядер та потоків, використовуючи трасування Perfetto з навантаженням менше 1%.
  • Memory Profiler відстежує Java Heap, Native Heap, Graphics та Stack з підтримкою HPROF-дампів.
  • Network Profiler фіксує всі запити OkHttp, Retrofit та Ktor із заголовками, тілом та тривалістю.
  • Energy Profiler класифікує енергоспоживання застосунку за категоріями від Idle до Overloaded.
  • Профілювальник працює без зміни коду застосунку — нульова інтеграція.
  • Вбудуйте профілювання в CI через Firebase Test Lab та зберігайте baseline для кожного релізу.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також