Ответ вслух Senior Производительность и утечки памяти обновлено

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

Вопрос

Холодный старт приложения 2.5 секунды. Как ты будешь его ускорять?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала измеряю, а не гадаю: Macrobenchmark-тест старта на release-подобной сборке даёт стабильные цифры TTID (первый кадр) и TTFD (когда контент реально готов, отмечаю его reportFullyDrawn), а трасса Perfetto показывает, что именно занимает время.

Что должно прозвучать в ответе

  • Измерить: 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 ошибок.