CodeBlanks Logo Icon CodeBlanks

SharedFlow

SharedFlow ile paylaşılan akış öğrenirsin.

SharedFlow nedir?

SharedFlow, birden fazla toplayıcıya aynı anda yayın yapan sıcak bir akıştır. StateFlow'tan farklı olarak bir başlangıç değeri taşımaz; yalnızca yayın yapılan değerleri iletir.

Bir MutableSharedFlow<T>() ile oluşturulur; .emit(value) ile değer gönderilir. Yeni toplayıcılar yalnızca sonraki yayınları alır. Olay tabanlı bildirimler için uygundur: bir butona tıklama, bir mesaj geldiğinde uyarı verme gibi. replay parametresi ile son N değeri yeni toplayıcılara verecek şekilde yapılandırılabilir.

SharedFlow kullanımı

Bir MutableSharedFlow açıp bir launch içinde .collect ile dinlersin. Başka bir coroutine .emit ile değer gönderince toplayıcı onu alır.

Örnek: val flow = MutableSharedFlow<Int>(). Bir launch içinde flow.collect { v -> println(v) } açarsın, ana akışta flow.emit(1) dediğinde toplayıcı 1 alır. Aynı anda ikinci bir collect açarsan her iki toplayıcı da değeri alır.

Uygulama SharedFlow ile emit ve collect

val flow = MutableSharedFlow<Int>() tanımla. Bir launch içinde flow.collect { value -> println("Aldı: $value") } aç. delay(100) sonrası flow.emit(1) çağır, delay(100) bekle ve job.cancel() ile toplayıcıyı durdur.

Başlangıç kodu

Main.kt
// SharedFlow emit ve collect
// buraya yaz
fun main() = runBlocking {
    
}

Örnek çözüm

Main.kt
fun main() = runBlocking {
    val flow = MutableSharedFlow<Int>()
    val job = launch {
        flow.collect { value -> println("Aldı: $value") }
    }
    delay(100)
    flow.emit(1)
    delay(100)
    job.cancel()
}

Beklenen çıktı

Aldı: 1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 SharedFlow parçalarını eşle

Kavram Anlamı
MutableSharedFlow Yayın taşıyıcı
.emit Değer gönderir
.collect Toplama
replay Son N değer

2 SharedFlow'ın başlangıç değeri var mıdır?

  • Evet, her zaman
  • Yalnızca suspend ile
  • Sadece Int için
  • Hayır, yoktur Doğru cevap

Açıklama: SharedFlow başlangıç değeri taşımaz.

3 SharedFlow tür parametresini tamamla

Soru
val flow = MutableSharedFlow<____>()
Cevap
val flow = MutableSharedFlow<Int>()

Açıklama: SharedFlow bir tür parametresi ister.

İleri seviye bölümündeki tüm dersler