Ответ
rememberSavable — это комбинация remember и saveable в Jetpack Compose, позволяющая сохранять состояние при изменении конфигурации (например, повороте экрана) или процессе смерти процесса.
Пример:
var text by rememberSaveable { mutableStateOf("") }
TextField(
value = text,
onValueChange = { text = it }
)
Особенности:
- Работает через
Bundle(похоже наonSaveInstanceState). - Поддерживает пользовательские
Saverдля сложных объектов. - Не сохраняет состояние при выходе из приложения.
Ответ 18+ 🔞
А, ну это же та самая штука, которая не даёт твоему интерфейсу обнулиться, как будто у него склероз, когда пользователь экран поворачивает или система приложение в фоне прибивает! rememberSavable, ёпта, спасение для ленивых.
Вот смотри, обычный remember — он как кратковременная память у золотой рыбки. Пока композиция жива — всё ок. Но стоит только повернуть телефон — композиция перестраивается заново, и твой TextField с введённым текстом становится пустым. Пиздец, пользователь взвоет!
А rememberSaveable — это уже продвинутая рыбка, которая ведёт дневник. Она ключевые вещи (состояние) записывает в системный Bundle (это такая коробка, куда Android скидывает всякое перед тем, как процесс убить). Потом, когда всё заново запускается, она из этой коробки своё состояние достаёт. Магия, блядь!
Простой пример — чтобы мозг не взорвался:
var userInput by rememberSaveable { mutableStateOf("") }
TextField(
value = userInput,
onValueChange = { userInput = it }
)
Вот и всё. Теперь что ни вводи — хоть «хуй с горы», хоть «манда с ушами» — при повороте текст на месте останется. Доверия к приложению сразу больше, ебать, чем ноль.
Но есть подводные грабли, чувак, будь осторожен!
Эта штука через Bundle работает, а туда можно пихать не всё что угодно, а только примитивы да Parcelable объекты. Если попробуешь сохранить какую-нибудь свою хитровыебанную дата-класс-модель — получишь пиздюлину в виде краша. Удивление пиздец будет!
Для таких случаев есть Saver — это как инструкция для rememberSaveable, объясняющая, как твой сложный объект разобрать на примитивы для коробки (Bundle), а потом обратно собрать. Но это уже высший пилотаж, на любителя.
Короче, запомни:
- Для простых вещей (строка, число, булеан) —
rememberSaveableработает из коробки. Красота. - Для выхода из приложения — эта хуйня не поможет. Тут уже нужно
ViewModelсSavedStateHandleили база данных.rememberSaveable— не волшебная палочка на все случаи. - Если что-то не сохраняется — первым делом смотри, а сохраняемый ли это тип вообще. Не пытайся впендюрить туда что попало.
Используй с умом, и интерфейс будет стабильным, как швейцарские часы. А не как мои нервы после пятницы.