Android · 1 / 5
Запуск приложения
От нажатия на иконку до первого кадра
Запуск UI — путь от запроса открыть Activity до пригодного к использованию экрана. Первый кадр и завершение загрузки данных — разные моменты: измеряйте TTID и TTFD отдельно. App startup time.
Цепочка запуска
- Лаунчер запрашивает запуск launchable Activity. Системные службы внутри
system_serverразрешают Intent, задачу и процесс. - Если нужен процесс, система получает его через Zygote. Возможен заранее созданный процесс из USAP-пула: не всякий тап означает новый
forkименно в этот момент. Zygote. - В реализации AOSP Android 16 (
android16-qpr2-release)ActivityThread.main()подготавливает главный Looper и связывает процесс с системой. Это деталь реализации, не API приложения. ActivityThread. - Процесс инициализирует Application и компоненты. Провайдеры, устанавливаемые при обычном bind процесса, инициализируются до
Application.onCreate; direct boot и отложенная доступность компонентов требуют отдельного учёта. Application.onCreate, App Startup. - Создаётся Activity и формируется первый кадр. Работа в
onCreateи первая композиция влияют на старт, но вызовonResumeне означает, что полезные данные уже показаны. Измерение старта.
Типы старта
- Холодный: запуск с созданием процесса и Activity.
- Тёплый: часть работы выполняется заново; типичный случай — живой процесс и новая Activity. Руководство Android также рассматривает восстановление после выгрузки с сохранённым state, поэтому фиксируйте условия измерения.
- Горячий: существующий экран возвращается на передний план с меньшим объёмом инициализации. Классификация.
Как искать задержку
Сравнивайте повторные замеры одного сценария на одном устройстве и build type. StartupTimingMetric даёт время первого отображения и полного отображения при корректном reportFullyDrawn; трасса показывает вклад инициализации и I/O. Профили и перенос работы оценивают повторным замером. Macrobenchmark.