Sobes.tech
Junior — Middle

Mi a különbség a ViewModelban történő adatszolgáltatás és az onSaveInstanceState módszer alkalmazása között az alkalmazás állapotának megőrzése érdekében?

sobes.tech MI

Válasz az MI-től

A ViewModel és az onSaveInstanceState az állapot mentésére szolgál, de különböző módon működnek, és különböző célokra készültek.

  • ViewModel az adatokat az Activity vagy Fragment életciklusához kötött memóriában tárolja. Átéli a képernyőforgatásokat és más konfigurációs változásokat, az adatok újratöltése nélkül megőrzi azokat. Azonban, amikor az alkalmazás folyamata teljesen megszűnik (például memóriahiány miatt), a ViewModel adatai elvesznek.

  • onSaveInstanceState kis adatmennyiséget ment egy Bundle objektumba, amit a rendszer sorosít és az alkalmazás újraindításakor visszaállít, miután az Activity-t megsemmisítették. Ez a módszer alkalmas egyszerű és kis adatok (például UI állapot) mentésére, de nem nagy vagy összetett objektumokra.

Példa:

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

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

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

// Az onCreate-ban
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val value = savedInstanceState?.getString("key")
}

Összefoglalva:

  • Használja a ViewModel-t az olyan adatok tárolására, amelyeknek túl kell élniük a képernyőforgatást.
  • Használja az onSaveInstanceState-t az állapot mentésére, amelyet vissza akar állítani az Activity vagy a folyamat teljes megsemmisítése után.