В чем разница между snapshotFlow, derivedStateOf, remember и rememberSavable

«В чем разница между snapshotFlow, derivedStateOf, remember и rememberSavable» — вопрос из категории Jetpack Compose, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

snapshotFlow преобразует State в Flow, эмитируя значения при изменении состояния. Полезно для интеграции с корутинами.

val state = remember { mutableStateOf(0) }
LaunchedEffect(Unit) {
    snapshotFlow { state.value }.collect { /* ... */ }
}

derivedStateOf вычисляет производное состояние, обновляясь только при изменении зависимостей. Оптимизирует рекомпозиции.

val listState = rememberLazyListState()
val showButton by remember {
    derivedStateOf { listState.firstVisibleItemIndex > 0 }
}

remember сохраняет значение во время рекомпозиции, но сбрасывается при изменении ключей или выходе из Composition.

rememberSaveable сохраняет значение через Bundle при конфигурационных изменениях (поворот экрана). Поддерживает Saver для кастомных объектов.