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 βοηθά στη διατήρηση της κατάστασης σε πιο σοβαρά γεγονότα, όπως η καταστροφή της διαδικασίας.