Nisa Efendioğlu

Kotlin'de SharedFlow ve Channel

Profile picture

Nisa Efendioğlu

Post Image

Eğer Kotlin'de veri akışlarını yönetmek için çalışıyorsanız, büyük ihtimalle SharedFlow ve Channel gibi kavramlarla karşılaşmışsınızdır. İlk bakışta bu ikisi benzer görünse de, aslında oldukça farklı kullanım alanlarına sahiptirler. Gelin daha detaylı bir göz atalım!

1. SharedFlow Nedir?

SharedFlow, Kotlin'in modern veri akış mekanizmalarından biridir. Temel amacı, birden fazla gözlemciye (collector) aynı anda veri gönderebilmektir. Bu yüzden SharedFlow, broadcasting (yayın) yapabilen bir veri akışı olarak düşünülebilir.

🧠 SharedFlow Nasıl Çalışır?

  • Hot Stream: Veriler, bir gözlemci (collector) olsa da olmasa da yayılmaya devam eder.
  • Replay desteği vardır: Daha önce yayılan verilerin bir kısmını yeni gözlemcilere tekrar gönderebilir.
  • Aynı anda birden fazla gözlemci verileri dinleyebilir.
  • LiveData'ya benzer ama Coroutine tabanlı olduğu için daha performanslıdır ve daha esnektir.

Ne Zaman Kullanılır?

SharedFlow, özellikle şu durumlarda kullanılır:

  • Birden fazla UI bileşenine aynı anda veri göndermek istiyorsanız. Örneğin, kullanıcı tıklamaları, hata mesajları veya uygulama durum değişikliklerini paylaşmak için.
  • ViewModel içinde olayları (events) veya durumları (states) paylaşmak için.

🎯 SharedFlow Örneği

Diyelim ki bir kullanıcı tıklama olayını tüm dinleyicilere iletmek istiyoruz:

ViewModel:

image

UI Katmanı:

image

Burada sendEvent çağrıldığında, tüm gözlemciler (collector) bu olayı alacaktır. Replay özelliği sayesinde, yeni bir gözlemci eklendiğinde geçmişteki olayları da görebilir.

2. Channel Nedir?

Channel, iki coroutine arasında point-to-point (nokta atışı) iletişim sağlayan bir veri yapısıdır. Bir üretici (producer) veri gönderir, bir tüketici (consumer) bu veriyi alır. Ancak bir fark var: Channel, aynı anda sadece bir tüketiciye veri gönderir.

🧠 Channel Nasıl Çalışır?

  • Cold Stream: Veriler yalnızca bir alıcı (receiver) olduğunda gönderilir.
  • Her bir veri, yalnızca tek bir alıcıya teslim edilir. Eğer birden fazla alıcı varsa, hangisinin veriyi alacağını bilmiyoruz.
  • Buffer özelliği vardır: Veriler belirli bir tampon (buffer) dolana kadar saklanabilir. Ancak tampon dolduğunda, yeni veri gönderme bekletilir ya da eski veriler kaybolur.

Ne Zaman Kullanılır?

  • İki coroutine arasında veri alışverişi yapmak istediğinizde.
  • Üretici-tüketici modellerinde (Producer-Consumer) veri akışı sağlamak için.

🎯 Channel Örneği

Şimdi bir Channel ile nasıl çalışıldığını görelim:

Channel Tanımlama ve Veri Gönderme:

image

Çıktı:

image

Burada, Producer veriyi gönderiyor, Consumer ise bu veriyi alıyor. for döngüsü sayesinde kanal kapanana kadar tüm mesajları alıyoruz.

3. SharedFlow ve Channel Arasındaki Farklar

image

4. Hangi Durumda Hangisini Kullanmalıyım?

Birden fazla gözlemciye aynı anda veri göndermeniz gerekiyorsa: SharedFlow kullanabilirsiniz.

İki coroutine arasında nokta atışı bir iletişim gerekiyorsa: Channel` tercih edebilirsiniz.

🎉 Sonuç

Kotlin'de hem SharedFlow hem de Channel, farklı ihtiyaçlara göre tasarlanmış güçlü araçlardır. Eğer bir uygulamanın UI tarafında olay paylaşımı yapmanız gerekiyorsa, SharedFlow modern ve esnek bir çözüm sunar. Ancak daha düşük seviyede, coroutine'ler arasında veri paylaşımı gerekiyorsa, Channel sizin için daha uygun olacaktır.

Umarım sizler için faydalı bir makale olmuştur.

Güvenli kodlamalar!

Go back