Как ускорить запуск приложения
Вопрос
Холодный старт приложения 2.5 секунды. Как ты будешь его ускорять?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Измерить: Macrobenchmark, TTID и TTFD, трассировка Perfetto
Разгрузить Application.onCreate: ленивая и фоновая инициализация SDK
Первый экран без синхронных запросов к диску и сети
Baseline Profiles и Startup Profiles
R8 в release
Контроль в CI и Android Vitals
Что могут спросить следом
- Что такое TTID и TTFD?
- Как сгенерировать Baseline Profile?
Разбор
Сначала измеряю, а не гадаю: Macrobenchmark-тест старта на release-подобной сборке даёт стабильные цифры TTID (первый кадр) и TTFD (когда контент реально готов, отмечаю его reportFullyDrawn), а трасса Perfetto показывает, что именно занимает время. Обычно главная проблема в Application.onCreate: десяток SDK инициализируются синхронно. Перевожу их на ленивую инициализацию при первом использовании или в фон, некритичные откладываю после первого кадра, использую App Startup для порядка. На первом экране убираю синхронное чтение диска и базы, показываю каркас и подгружаю данные асинхронно. Затем Baseline Profile: генерирую его Macrobenchmark-тестом, который проходит старт и ключевые сценарии, это заметно ускоряет первые запуски, особенно с Compose. Проверяю, что R8 включён в release. Чтобы не было регрессий, гоняю бенчмарк в CI и слежу за метриками старта в Android Vitals.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.