Android · 1 / 5

Запуск приложения

От нажатия на иконку до первого кадра

Запуск UI — путь от запроса открыть Activity до пригодного к использованию экрана. Первый кадр и завершение загрузки данных — разные моменты: измеряйте TTID и TTFD отдельно. App startup time.

Цепочка запуска

  1. Лаунчер запрашивает запуск launchable Activity. Системные службы внутри system_server разрешают Intent, задачу и процесс.
  2. Если нужен процесс, система получает его через Zygote. Возможен заранее созданный процесс из USAP-пула: не всякий тап означает новый fork именно в этот момент. Zygote.
  3. В реализации AOSP Android 16 (android16-qpr2-release) ActivityThread.main() подготавливает главный Looper и связывает процесс с системой. Это деталь реализации, не API приложения. ActivityThread.
  4. Процесс инициализирует Application и компоненты. Провайдеры, устанавливаемые при обычном bind процесса, инициализируются до Application.onCreate; direct boot и отложенная доступность компонентов требуют отдельного учёта. Application.onCreate, App Startup.
  5. Создаётся Activity и формируется первый кадр. Работа в onCreate и первая композиция влияют на старт, но вызов onResume не означает, что полезные данные уже показаны. Измерение старта.

Типы старта

  • Холодный: запуск с созданием процесса и Activity.
  • Тёплый: часть работы выполняется заново; типичный случай — живой процесс и новая Activity. Руководство Android также рассматривает восстановление после выгрузки с сохранённым state, поэтому фиксируйте условия измерения.
  • Горячий: существующий экран возвращается на передний план с меньшим объёмом инициализации. Классификация.

Как искать задержку

Сравнивайте повторные замеры одного сценария на одном устройстве и build type. StartupTimingMetric даёт время первого отображения и полного отображения при корректном reportFullyDrawn; трасса показывает вклад инициализации и I/O. Профили и перенос работы оценивают повторным замером. Macrobenchmark.

К вопросам →