Собирайте состояние в viewLifecycleOwner.lifecycleScope внутри repeatOnLifecycle(STARTED). Это останавливает подписку вместе с View и возобновляет её при возвращении экрана.
Обновление UI во Fragment только при активном состоянии и новом State
Собирайте состояние в viewLifecycleOwner.lifecycleScope внутри repeatOnLifecycle(STARTED). Это останавливает подписку вместе с View и возобновляет её при возвращении экрана.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Внутри фрагмента осуществляется подписка на объект State, используемый в MV‑паттерне. Необходимо реализовать логику, при которой представление (View) фрагмента будет обновляться лишь в том случае, когда фрагмент находится в активном состоянии жизненного цикла и поступает новое значение состояния.
Ответ
Собирайте состояние в viewLifecycleOwner.lifecycleScope внутри repeatOnLifecycle(STARTED). Это останавливает подписку вместе с View и возобновляет её при возвращении экрана.
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.state.collect { state -> render(state) }
}
}
StateFlow сам объединяет равные последовательные значения; для обычного Flow при необходимости добавляют distinctUntilChanged. После пересоздания View последнее состояние нужно отобразить снова, даже если оно не изменялось: новую View ещё не отрисовали. Если «активный» означает только RESUMED, выбирают этот порог явно.
Источник: developer.android.com.