
Комментарии 6
Спасибо за статью! Скажите в чем преимущество использования функции rememberNavBackStack по сравнению с обычным хранением стеков в Navigator?
rememberNavBackStack сериализует стэк навигации. Благодаря этому стэк может быть восстановлен после смерти процесса.
Если не использовать rememberNavBackStack, то юзера выкинет на начальный экран.
А всегда ли нужно переживать смерть процесса и пытаться восстановить стек?
Все загруженные/введенные данные, сохраненные внутри ViewModel все равно будут потеряны при смерти процесса. Не будет ли потеря стека и "запуск с нуля" лучшей стратегией при смерти процесса?
По хорошему данные вьюмодели, которые не могут быть повторно загружены нужно тоже сериализовать и сохранять (обычно при помощи SavedStateHandle). К сожалению многие на это просто забивают и поэтому приложения восстанавливаются с потерей всех данных и стэка.
Есть ли у Вас предпочтения по использованию SavedStateHandle?
Стоит ли сохранять state экрана (если это MVI) в SavedStateHandle?
Или достаточно хранить там только самые "важные" данные экрана?По поводу восстановления стека - это рекомендуемая стратегия, но в ситуации, когда разработчики не сохраняют стейт экрана, это может приводить к неконсистетному состоянию (когда состояние ДО != ПОСЛЕ восстановления).
И тут вопрос, что лучше для пользователя - получить такое состояние или запуск с нуля?
Думаю целиком сохранять UiState не стоит, часть стэйта может быть восстановлена путём повторного запроса к бэку. Главное сохранить то, что требуется для восстановления стэка. В остальном нужно ориентироваться на бизнесс трбования. Ну и отдельно подумать по поводу чувствительных данных.
Да, верно. Тут нужно решить с бизнесом и командой, готовы ли вы тратить время разработки на то, чтобы обрабатывать восстановление приложения. Разумеется это будет работать, только если на всех экранах в стэке должным образом сохраняется состояние.
Navigation3 + Koin в Compose Multiplatform