Какие знаешь способы нахождения причин долгого запуска приложения

«Какие знаешь способы нахождения причин долгого запуска приложения» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные методы диагностики:

  1. Logcat + временные метки
    Добавляем логи с временем выполнения ключевых этапов:
    val startTime = System.currentTimeMillis()
    // Инициализация
    Log.d("PERF", "Init time: ${System.currentTimeMillis() - startTime}ms")
  1. Android Studio Profiler
    Используем CPU/Memory профилировщик для анализа узких мест во время запуска.

  2. Метод reportFullyDrawn()
    Позволяет замерять полное время от старта до готовности UI:

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        if (hasFocus) reportFullyDrawn()
    }
  1. StrictMode
    Помогает выявить операции на UI-потоке:
    StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder()
        .detectDiskReads()
        .detectDiskWrites()
        .penaltyLog()
        .build())
  1. Systrace/Perfetto
    Инструменты для детального анализа работы потоков и системных вызовов.

Основные причины: тяжелая инициализация в Application, блокировка UI-потока, избыточная работа в onCreate Activity.