Обновить

Комментарии 6

Спасибо за статью! Скажите в чем преимущество использования функции rememberNavBackStack по сравнению с обычным хранением стеков в Navigator?

rememberNavBackStack сериализует стэк навигации. Благодаря этому стэк может быть восстановлен после смерти процесса.

Если не использовать rememberNavBackStack, то юзера выкинет на начальный экран.

А всегда ли нужно переживать смерть процесса и пытаться восстановить стек?
Все загруженные/введенные данные, сохраненные внутри ViewModel все равно будут потеряны при смерти процесса. Не будет ли потеря стека и "запуск с нуля" лучшей стратегией при смерти процесса?

По хорошему данные вьюмодели, которые не могут быть повторно загружены нужно тоже сериализовать и сохранять (обычно при помощи SavedStateHandle). К сожалению многие на это просто забивают и поэтому приложения восстанавливаются с потерей всех данных и стэка.

  1. Есть ли у Вас предпочтения по использованию SavedStateHandle?
    Стоит ли сохранять state экрана (если это MVI) в SavedStateHandle?
    Или достаточно хранить там только самые "важные" данные экрана?

  2. По поводу восстановления стека - это рекомендуемая стратегия, но в ситуации, когда разработчики не сохраняют стейт экрана, это может приводить к неконсистетному состоянию (когда состояние ДО != ПОСЛЕ восстановления).
    И тут вопрос, что лучше для пользователя - получить такое состояние или запуск с нуля?

  1. Думаю целиком сохранять UiState не стоит, часть стэйта может быть восстановлена путём повторного запроса к бэку. Главное сохранить то, что требуется для восстановления стэка. В остальном нужно ориентироваться на бизнесс трбования. Ну и отдельно подумать по поводу чувствительных данных.

  2. Да, верно. Тут нужно решить с бизнесом и командой, готовы ли вы тратить время разработки на то, чтобы обрабатывать восстановление приложения. Разумеется это будет работать, только если на всех экранах в стэке должным образом сохраняется состояние.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации