Sobes.tech
Junior — Middle

Чӣ гуна Android механизмии нигоҳдории ҳолати ViewModel дар вақти тағирёбии конфигуратсия ё дар давоми давраи ҳаётро иҷро мекунад?

sobes.tech AI

Ҷавоб аз AI

Дар Android ViewModel барои нигоҳ доштани ва идора кардани маълумоти UI бо дарназардошти давраи ҳаёт пешбинӣ шудааст. Ҳангоми тағирёбии конфигуратсия (масалан, гардиши экран), системаи 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 кӯмак мекунад, ки ҳолатро дар ҳодисаҳои вазнинтар, масалан, нобудшавии раванди системавӣ, нигоҳ дорад.