Жизненный цикл приложения во Flutter
Вопрос
Как отследить, что приложение ушло в фон или вернулось, и какие задачи вы так решали?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
`AppLifecycleState`: resumed, inactive, hidden, paused, detached
Подписка через `WidgetsBindingObserver` или `AppLifecycleListener`, отписка в `dispose`
Примеры: пауза видео, сохранение черновика, переподключение сокета, обновление данных при возврате
При уходе в фон нельзя рассчитывать на долгую работу: ОС может приостановить или убить процесс
Фоновые задачи через платформенные механизмы (WorkManager, BGTaskScheduler), а не через таймеры Dart
Что могут спросить следом
- Чем
inactiveотличается отpaused? - Как сохранить данные, если ОС убьёт приложение в фоне?
Разбор
Образцовый ответ: «Состояние приложения приходит через WidgetsBinding. Раньше я подключал миксин WidgetsBindingObserver и метод didChangeAppLifecycleState, сейчас удобнее AppLifecycleListener с колбэками onPause, onResume, его нужно освободить в dispose. Состояния: resumed активное, inactive видно без ввода, например звонок, hidden и paused в фоне, detached без окна. На практике при paused я ставлю видео на паузу, сохраняю черновик формы и закрываю сокет, а при resumed переподключаюсь и обновляю данные, если прошло много времени. Важно помнить, что в фоне ОС может приостановить и убить процесс, поэтому сохранять нужно сразу, а долгую фоновую работу делать через платформенные механизмы вроде WorkManager»
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.