Middle
Как да запазите състоянието на ViewModel в архитектурните компоненти на Android?
sobes.tech AI
Отговор от AI
За запазване на състоянието на ViewModel, което ще оцелее при унищожаване на процеса, се използва SavedStateHandle.
SavedStateHandle е подобно на Map хранилище, свързано със запазеното състояние на Activity или Fragment.
Принцип на работа:
ViewModelполучаваSavedStateHandleкато параметър в конструктора.- Данните се запазват в
SavedStateHandleчрез методаset(). - При възстановяване на Activity/Fragment, запазените данни автоматично са достъпни в
SavedStateHandleнаViewModel, който ще бъде създаден наново.
Пример за използване:
class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
private val _myValue = state.getLiveData<String>("myKey")
val myValue: LiveData<String> get() = _myValue
fun saveValue(newValue: String) {
state.set("myKey", newValue)
}
}
SavedStateHandle поддържа запазване на примитивни типове като Int, String, Boolean, както и parcelable и serializable обекти.
Важно е да се разбере, че SavedStateHandle е предназначен за запазване на малко количество данни, свързани с UI. За по-сложни или големи обеми данни трябва да се използват други механизми като Room Database или DataStore.