В чем разница между remember и rememberSaveable

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

Ответ

remember сохраняет значение только во время рекомпозиции, но теряет его при изменении конфигурации (например, повороте экрана).

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

Пример:

var counter1 by remember { mutableStateOf(0) } // Сбросится при повороте
var counter2 by rememberSaveable { mutableStateOf(0) } // Сохранится

Для кастомных объектов:

data class User(val name: String)

val saver = run {
    Saver<MutableState<User>, Any>(
        save = { it.value.name },
        restore = { mutableStateOf(User(it as String)) }
    )
}

val userState = rememberSaveable(stateSaver = saver) { mutableStateOf(User("Alex")) }