Ответ
FragmentManager автоматически вызывает onSaveInstanceState() для фрагментов при уничтожении активности (например, при повороте экрана). Сохраненное состояние передается в onCreate(), onCreateView() и onViewStateRestored(). Для ViewModel используется SavedStateHandle, который автоматически сохраняет/восстанавливает данные через ViewModelProvider.
Пример с SavedStateHandle:
class MyViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
val liveData = savedStateHandle.getLiveData<String>("key")
fun saveData(value: String) {
savedStateHandle.set("key", value)
}
}
Механизм работает благодаря:
- Фрагмент реализует интерфейс
SavedStateRegistryOwner - ViewModel получает SavedStateHandle через фабрику
- При восстановлении данные автоматически подтягиваются из Bundle