Sobes.tech
Junior — Middle

Как реализира Android механизма за запазване на състоянието на ViewModel при промени в конфигурацията или по време на жизнения цикъл?

sobes.tech AI

Отговор от AI

В Android ViewModel е предназначена за съхраняване и управление на данни за потребителския интерфейс, като взема предвид жизнения цикъл. При промени в конфигурацията (например завъртане на екрана), системата унищожава Activity или Fragment, но ViewModel се запазва и се предоставя отново на новите екземпляри.

Това се постига чрез ViewModelProvider, който свързва ViewModel с жизнения цикъл на компонента. ViewModel се съхранява в паметта, докато е свързан с жизнения цикъл на собственика (Activity/Fragment). При унищожаване на компонента поради промяна в конфигурацията, ViewModel не се унищожава, а се използва повторно в нов екземпляр.

За запазване на състоянието вътре във ViewModel може да се използва SavedStateHandle — специален обект, който позволява запазване и възстановяване на данни при унищожаване на процеса или други ситуации, които надхвърлят обикновената промяна в конфигурацията.

Пример за използване на SavedStateHandle:

class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
    var counter: Int
        get() = state.get<Int>("counter") ?: 0
        set(value) = state.set("counter", value)
}

По този начин, ViewModel запазва данните в паметта при промени в конфигурацията, а SavedStateHandle помага да се запази състоянието при по-сериозни събития, като унищожаване на процеса.