Sobes.tech
Junior — Middle

Ի՞նչ տարբերություն կա ViewModel-ում տվյալների պահպանումը և հավելվածի վիճակի պահպանման համար onSaveInstanceState մեթոդի օգտագործման միջև։

sobes.tech AI

Պատասխան AI-ից

ViewModel և onSaveInstanceState ծառայում են վիճակի պահպանման համար, բայց աշխատում են տարբեր կերպ և նախատեսված են տարբեր նպատակների համար:

  • ViewModel պահում է տվյալները հիշողության մեջ, որը կապված է Activity կամ Fragment-ի կյանքի ցիկլի հետ: Այն անցնում է էկրանին պտտելու և այլ կոնֆիգուրացիոն փոփոխությունների ժամանակ, պահելով տվյալները առանց կրկնակի բեռնելու: Սակայն, երբ հավելվածի գործընթացը ամբողջությամբ ավարտվում է (օրինակ, հիշողության պակասի պատճառով), ViewModel-ի տվյալները կորում են:

  • onSaveInstanceState պահում է փոքր տվյալներ Bundle օբյեկտում, որը սերիալիզացվում է և համակարգը վերականգնում է այն գործընթացի ավարտից հետո Activity-ի վերականգնման ժամանակ: Այս մեթոդը հարմար է պարզ և փոքր տվյալների (օրինակ, UI-ի վիճակի) պահպանման համար, բայց ոչ մեծ ծավալի կամ բարդ օբյեկտների համար:

Օրինակ՝

class MyViewModel : ViewModel() {
    var userData: String? = null
}

// Activity-ում
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

// onSaveInstanceState
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("key", "value")
}

// վերականգնում onCreate-ում
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val value = savedInstanceState?.getString("key")
}

Ամփոփում՝

  • Օգտագործեք ViewModel՝ տվյալների համար, որոնք պետք է անցնեն էկրանին պտտելու ժամանակ:
  • Օգտագործեք onSaveInstanceState՝ վիճակի պահպանման համար, որը ցանկանում եք վերականգնել ամբողջական Activity կամ գործընթացի ոչնչացումից հետո: