Sobes.tech
Junior — Middle

Amacı ve davranışları bağlamında LaunchedEffect ve DisposableEffect etkileri arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

LaunchedEffect ve DisposableEffect, Jetpack Compose'da yan etkileri yönetmeye yardımcı olan efektlerdir, ancak farklı amaçlara ve davranışlara sahiptirler.

  • LaunchedEffect, anahtarların (anahtarlar, etkinin bağlı olduğu parametrelerdir) değişimine yanıt olarak çalıştırılması gereken korutinleri başlatmak için kullanılır. Anahtarlar değiştiğinde otomatik olarak iptal edilir ve yeniden başlatılır. Genellikle, veri yükleme veya animasyon başlatma gibi asenkron işlemler için kullanılır.

  • DisposableEffect, etkinin yok edilmesi sırasında kaynakların serbest bırakılmasını gerektiren yan etkileri yürütmek için tasarlanmıştır. Anahtarları alır ve etkinin artık geçerli olmadığı durumlarda çağrılan bir temizleme fonksiyonu (dispose) döner. Dinleyicileri kaydetmek, abonelikleri yönetmek, kaynakları serbest bırakmak için kullanılır.

Örnek:

// userId değiştiğinde korutini başlatmak için LaunchedEffect
LaunchedEffect(userId) {
    val data = repository.loadUser(userId)
    // durumu güncelle
}

// Dinleyiciyi kaydetmek ve iptal etmek için DisposableEffect
DisposableEffect(sensorManager) {
    val listener = object : SensorEventListener { /*...*/ }
    sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL)
    onDispose {
        sensorManager.unregisterListener(listener)
    }
}