Sobes.tech
Junior — Middle

Ի՞նչ տարբերություն կա 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)
    }
}