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.