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-ը օգնում է պահպանել վիճակը ավելի լուրջ իրադարձությունների ժամանակ, օրինակ՝ գործընթացի ոչնչացման դեպքում։