У меня есть экран, который загружает кучу запросов и собирает некоторые данные от пользователя на том же экране и во внешнем WebView. Поэтому у меня есть ViewModel, который содержит эти сложные объекты запроса (+ данные, вводимые пользователем). Мне нужно сохранить эти данные через завершение процесса, инициированного системой, для которого предназначен SavedStateHandle
. Но я не хочу сохранять эти данные в базе данных, потому что они актуальны только для текущего пользовательского опыта.
Я интегрировал свои ViewModels с Hilt и получил SaveStateHandle
. Поскольку у меня есть некоторые сложные объекты, к которым осуществляется доступ / изменение в нескольких местах кода, я не могу сохранить их «на go». Я заставил их реализовать Parcelable
и просто хотел сразу их сохранить. К сожалению, у ViewModels нет такого метода жизненного цикла, как onSaveInstanceState()
.
Теперь я попытался использовать onCleared()
, который звучал как нормальное место для записи в дескриптор. Но оказывается, что все .set()
операции, которые я выполняю там, теряются (я тестирую это с помощью опции разработчика «Не сохранять действия». Когда я использую .set()
в другом месте, это действительно работает). Поскольку ViewModel не привязан к жизненному циклу отдельного фрагмента / действия, а скорее к NavGraph, я не могу позвонить из их onSaveInstanceState()
.
Как / где я могу правильно сохранить свое состояние в SaveStateHandle
?