Три типа запуска приложения

Состояние памяти устройства в момент запуска определяет, сколько времени потребуется пользователю до первого взаимодействия с контентом.

Cold Start (холодный запуск)

Процесс приложения не существует — система создаёт его с нуля:

  1. ОС выделяет память и создаёт процесс
  2. Загружается JVM/Dalvik (Android) или запускается runtime (iOS)
  3. Инициализируется класс Application / AppDelegate
  4. Создаётся первый экран (Activity / ViewController)
  5. Загружаются данные для первого экрана

Это самый дорогой сценарий. Типичное время — 500 мс–3 с, в тяжёлых случаях до 8–10 с.

Warm Start (тёплый запуск)

Процесс существует в памяти, но Activity/ViewController была уничтожена (пользователь нажал «Назад» или ОС освободила ресурсы). Нет необходимости инициализировать Application — только пересоздать UI.

Быстрее cold start в 2–4 раза.

Hot Start (горячий запуск)

Приложение возвращается из фона: процесс жив, контекст сохранён. ОС возобновляет Activity/ViewController. Для пользователя — мгновенное возвращение на прежний экран.

Тип Что создаётся заново Типичное время
Cold Процесс + Application + UI 500 мс–3 с+
Warm UI (Application готов) 200–500 мс
Hot Ничего (только восстановление) < 100 мс

Почему cold start критичен для e-commerce

В e-commerce приложениях cold start особенно важен в двух сценариях:

Переход по push-уведомлению — пользователь не запускал приложение несколько часов, оно выгружено из памяти. Cold start 3+ с «остужает» намерение, сформированное пушем. Самое дорогое время для потери конверсии.

Утренний запуск — пользователь открывает приложение первым делом утром. Если первый экран загружается медленно, сессия начинается с разочарования.

Важно: отслеживайте cold start в Google Play Console (Android Vitals → App startup time) и Xcode Instruments / MetricKit (iOS). Оба инструмента позволяют видеть перцентили (p50, p95) — не только среднее.

Что замедляет cold start

  • Синхронные сетевые запросы в Application.onCreate() — блокируют основной поток
  • Тяжёлые SDK с немедленной инициализацией — аналитика, рекомендации, push-сервисы инициализируются последовательно
  • Большой размер DEX — дольше загрузка классов
  • Ожидание ответа сервера перед показом UI — пользователь видит белый экран вместо skeleton

Рекомендации по оптимизации

  • Используйте Splash Screen API (Android 12+) — унифицированный и оптимизированный переход
  • Инициализируйте SDK лениво — только те, что нужны на первом экране, сразу; остальные — после показа контента
  • Показывайте skeleton-экран немедленно, данные подгружайте асинхронно
  • Используйте baseline profiles (Android) для предварительной компиляции горячих путей кода