Выбор ответа Middle Compose: состояние и side-effects обновлено

Когда нужен DisposableEffect

Вопрос

Нужно подписаться на LifecycleObserver и обязательно отписаться при уходе composable. Какой API выбрать?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: DisposableEffect с onDispose. DisposableEffect создан для подписок с очисткой: блок onDispose вызывается при выходе из композиции или смене ключа.

Варианты ответа

  1. LaunchedEffect с try/finally
  2. DisposableEffect с onDisposeправильный ответ
  3. SideEffect с отпиской в конце
  4. remember с RememberObserver

Разбор

DisposableEffect создан для подписок с очисткой: блок onDispose вызывается при выходе из композиции или смене ключа. LaunchedEffect для корутин, SideEffect выполняется после каждой рекомпозиции без очистки, а remember просто хранит значение. LaunchedEffect с finally технически отпишется при отмене, но для подписок это обходной путь, а RememberObserver низкоуровневый API для своих объектов, а не для листенеров жизненного цикла.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.