Ответ
Основные методы диагностики:
- Logcat + временные метки
Добавляем логи с временем выполнения ключевых этапов:
val startTime = System.currentTimeMillis()
// Инициализация
Log.d("PERF", "Init time: ${System.currentTimeMillis() - startTime}ms")
-
Android Studio Profiler
Используем CPU/Memory профилировщик для анализа узких мест во время запуска. -
Метод
reportFullyDrawn()
Позволяет замерять полное время от старта до готовности UI:
override fun onWindowFocusChanged(hasFocus: Boolean) {
if (hasFocus) reportFullyDrawn()
}
- StrictMode
Помогает выявить операции на UI-потоке:
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.penaltyLog()
.build())
- Systrace/Perfetto
Инструменты для детального анализа работы потоков и системных вызовов.
Основные причины: тяжелая инициализация в Application, блокировка UI-потока, избыточная работа в onCreate Activity.