Ποια είναι η διαφορά μεταξύ των effects LaunchedEffect και DisposableEffect στο πλαίσιο του σκοπού και της συμπεριφοράς τους;
sobes.tech AI
Απάντηση από AI
Το LaunchedEffect και το DisposableEffect είναι αποτελέσματα στο Jetpack Compose που βοηθούν στη διαχείριση παρενεργειών, αλλά έχουν διαφορετικούς σκοπούς και συμπεριφορές.
-
Το LaunchedEffect χρησιμοποιείται για την εκκίνηση κορουτινών που πρέπει να εκτελούνται σε απάντηση σε αλλαγές κλειδιών (τα κλειδιά είναι παράμετροι από τους οποίους εξαρτάται το αποτέλεσμα). Αυτόματα ακυρώνεται και επανεκκινείται όταν αλλάζουν τα κλειδιά. Συνήθως χρησιμοποιείται για ασύγχρονες λειτουργίες, όπως φόρτωση δεδομένων ή εκκίνηση κινούμενων σχεδίων.
-
Το DisposableEffect προορίζεται για την εκτέλεση παρενεργειών που απαιτούν απελευθέρωση πόρων όταν το αποτέλεσμα καταστρέφεται. Δέχεται κλειδιά και επιστρέφει μια λειτουργία καθαρισμού (dispose), που καλείται όταν το αποτέλεσμα δεν είναι πλέον σχετικό (π.χ., όταν αλλάζουν τα κλειδιά ή καταστρέφεται το στοιχείο). Χρησιμοποιείται για την εγγραφή ακροατών, συνδρομών, απελευθέρωση πόρων.
Παράδειγμα:
// LaunchedEffect για την εκκίνηση μιας κορουτίνας κατά την αλλαγή του userId
LaunchedEffect(userId) {
val data = repository.loadUser(userId)
// ενημέρωση κατάστασης
}
// DisposableEffect για την εγγραφή και διαγραφή ακροατή
DisposableEffect(sensorManager) {
val listener = object : SensorEventListener { /*...*/ }
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
onDispose {
sensorManager.unregisterListener(listener)
}
}