რა განსხვავებაა 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)
}
}