Kotlin Coroutines 1.4 StateFlow ve SharedFlow


Görsel Referansı


Kotlin'deki Flow API, sıralı olarak yürütülen bir veri akışını eş zamansız olarak işlemek için tasarlanmıştır. Esas itibariyle Flow, bir dizidir. Flow ile Kotlin'de diziler ile yapabildiğimiz transform, map, ve filter gibi işlemlerin aynısını yapabiliriz. Kotlin dizileri ile Flow arasındaki temel fark, Flow'un yürütmenin askıya alınmasına izin vermesidir.

Flow ile herhangi bir yerde askıya alma işlemi yapabilirsiniz.


Flow Kotlin Sequence'ları kadar basittir. Fakat yine de bazı durumlarda gerekli olan durum yönetimini sağlamaz. Örneğin bir process'in birden çok ara durumu ve bir son durumu olabilir. Bir dosyanın indirilmesi, böyle bir sürecin örneğidir. İndirme işlemi bir süre sürer ve ara durumları "Başladı" daha sonra "Devam ediyor" olarak belirleyebiliriz ve son durum "Başarılı" ya da "Başarısız" olabilir. Bu durumda indirmenin başarılı olup olmadığını sadece sonuçlardan anlayabiliriz.


Yukarıdaki senaryoyu Flow API kullanarak uygularken, değişikliklere göre hareket edebilecek observer'lara durum değişikliklerini yayınlamak istediğinizde Flow API ile birlikte gelen StateFlow ve SharedFlow'u kullanabilirsiniz.



StateFlow


StateFlow; StateFlow ve MutableStateFlow olmak üzere iki çeşittir.


Burada state value ile temsil edilir. Value üzerinde herhangi bir güncelleme, durum güncellemelerine sahip bir değer emit ederek tüm akış dinleyicilerine yansıtılır.

Dosya indirme örneğine StateFlow ile bakacak olursak;


Bu örnek istemcilere değişmez bir state sürümünü sunar ve değiştirilebilir state (_state) durumu dahili olarak yönetir. İndirme işlevinde, önce dahili state durum değerini güncelliyoruz: _state.value = DownloadStatus.INITIALIZED. Daha sonra iç durumu ilerlemeyi gösteren ara durum ile gösterebiliriz. Sonunda state'i indirme durumunu gösteren nihai hali ile güncelleriz.




SharedFlow


Bir durumu yönetmek yerine bir dizi durum güncellemesini, yani bir olay akışını yönetmek gerektiğinde SharedFlow kullanabiliriz. Bu API emit edilen değerler dizisiyle ilgileniyorsanız kullanışlıdır. Örneğin bir veri akışında hareketli ortalamanın hesaplanması.



SharedFlow, atomik anlık görüntü olarak kullanılabilecek tekrar önbelleğini tutan bir akıştır. Her yeni abone, önce değerleri tekrar önbelleğinden alır ve ardından yeni emit edilen değerleri alır.


Daha fazla bilgi için: https://blog.jetbrains.com/kotlin/2020/10/kotlinx-coroutines-1-4-0-introducing-stateflow-and-sharedflow/


#android #kotlin #coroutines #stateflow #sharedflow

0 yorum

Son Paylaşımlar

Hepsini Gör

Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
imageedit_2_9667998092.png
JetBrains Hakkında Detaylı Bilgi Alın

© 2021 by mobiler.dev

Kurumsal Yazar Hesapları

adesso.png
mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın