Sobes.tech
Junior — Middle

Tətbiqin vəziyyətini saxlamaq üçün onSaveInstanceState metodundan istifadə etməklə ViewModel-də məlumatların saxlanması arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

ViewModel və onSaveInstanceState vəziyyəti saxlamaq üçün istifadə olunur, lakin onlar fərqli şəkildə işləyir və müxtəlif məqsədlər üçün nəzərdə tutulmuşdur.

  • ViewModel məlumatları Activity və ya Fragment-in həyat dövrünə bağlı yaddaşda saxlayır. O, ekranın döndürülməsi və digər konfiqurasiya dəyişikliklərindən sonra sağ qalır və məlumatları yenidən yükləməyə ehtiyac olmadan saxlayır. Lakin, tətbiqin prosesi tamamilə bağlandıqda (məsələn, yaddaş çatışmazlığı səbəbindən) ViewModel-dən olan məlumatlar itir.

  • onSaveInstanceState kiçik məlumatları bir Bundle obyektində saxlayır, bu obyekt seriyalaşdırılır və prosesin bağlanmasından sonra Activity yenidən yaradıldıqda sistem tərəfindən bərpa olunur. Bu metod sadə və kiçik məlumatların (məsələn, UI vəziyyəti) saxlanması üçün uyğundur, lakin böyük həcmdə və ya mürəkkəb obyektlər üçün deyil.

Nümunə:

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

// Activity-də
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

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

// Yenidən yükləmə onCreate-də
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val value = savedInstanceState?.getString("key")
}

Qısaca:

  • Ekran döndürməsindən sonra qalması lazım olan məlumatları saxlamaq üçün ViewModel istifadə edin.
  • Activity və ya proses tamamilə məhv edildikdən sonra vəziyyəti bərpa etmək üçün onSaveInstanceState istifadə edin.