SharedFlow
- Kotlin kursu
- İleri seviye
- Ders 8/83
- 5 dk
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
// SharedFlow emit ve collect
// buraya yaz
fun main() = runBlocking {
}Örnek çözüm
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
val flow = MutableSharedFlow<____>()
val flow = MutableSharedFlow<Int>()
Açıklama: SharedFlow bir tür parametresi ister.