Разбор Android-платформенных вопросов в формате тренировочного собеседования: Service, offline-first с Room и Flow, производительность запуска, prefetch и сохранение UI-состояния.
Это учебная встреча Android Academy Global по подготовке к техническим собеседованиям, построенная как разбор ответов на платформенные вопросы. Участники обсуждают передачу геолокации между Service и UI, Bound Service, Intent и Binder, offline-first архитектуру с Room и Flow, диагностику медленного cold start и стратегии prefetch. В конце разбирают сохранение состояния ViewModel, межпроцессное взаимодействие и способы избежать визуального мерцания при загрузке локальных данных.
Для часто обновляемой геолокации участники считают Bound Service практичнее BroadcastReceiver: broadcast требует упаковки данных в Intent/Bundle, сериализации и лишней доставки событий.
Не стоит хранить прямую ссылку на Service в Activity: их жизненные циклы различаются, и после пересоздания сервиса Activity может удерживать устаревший экземпляр. Для обновлений предлагают наблюдать Flow с учётом lifecycle UI.
В offline-first подходе UI должен читать данные из локальной базы, а ответ сети сначала обновлять эту базу; так устраняется гонка между ошибкой сети и поздним ответом из кэша.
Room DAO можно использовать как источник Flow, а подписку проводить через repository и ViewModel; обсуждается, что сочетание suspend и Flow для одного возвращаемого потока обычно не требуется.
ViewModel переживает configuration change, но не гарантирует сохранность после смерти процесса; для небольшого восстанавливаемого состояния предлагают SavedStateHandle или Bundle, избегая крупных сериализуемых объектов.
При расследовании медленного cold start нужно отдельно проверить ContentProvider библиотек, Application.onCreate, инициализацию DI-графа, стартовую Activity и тяжёлую иерархию layout; измерения профайлером стоит дополнять точечными таймингами, поскольку сам профайлер влияет на запуск.
Не следует запускать множество prefetch-запросов одновременно при cold start: для фоновой синхронизации обсуждаются WorkManager с ограничениями, push-сигналы и загрузка только данных, действительно нужных следующей функции.