Ի՞նչ տարբերություն կա LaunchedEffect և DisposableEffect ազդեցությունների միջև՝ դրանց նպատակների և վարքագծի առումով։
sobes.tech AI
Պատասխան AI-ից
LaunchedEffect և DisposableEffect են ազդեցություններ Jetpack Compose-ում, որոնք օգնում են կողմնակի ազդեցությունները կառավարել, բայց ունեն տարբեր նպատակներ և վարքագծեր:
-
LaunchedEffect օգտագործվում է կորյուտիններ սկսելու համար, որոնք պետք է կատարվեն պատասխանելով բանալիների փոփոխությանը (բանալիները — դա այն պարամետրերն են, որոնց վրա ազդում է ազդեցությունը): Այն ավտոմատ կերպով դադարեցվում և նորից սկսվում է, երբ բանալիները փոխվում են: Հաճախ օգտագործվում է ասինխրոնային գործողությունների համար, օրինակ՝ տվյալների բեռնում կամ անիմացիաների մեկնարկ:
-
DisposableEffect նախատեսված է կողմնակի ազդեցությունների համար, որոնք պահանջում են ռեսուրսների ազատում, երբ ազդեցությունը ոչ ակտիվ է: Այն ընդունում է բանալիներ և վերադարձնում է մաքրման ֆունկցիա (dispose), որը կանչվում է, երբ ազդեցությունը դադարում է լինել արդիական (օրինակ՝ երբ բանալիները փոխվում են կամ կոմպոնենտը ոչնչացվում է): Օգտագործվում է լսիչներ գրանցելու, բաժանորդագրություններ կառավարելու, ռեսուրսներ ազատելու համար:
Օրինակ:
// LaunchedEffect՝ coroutine սկսելու համար 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)
}
}