Kotlin Coroutines 1.4 StateFlow ve SharedFlow

Güncelleme tarihi: 9 Tem 2021


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.


val flow: Flow<Int> = flow { delay(100) for(i in 1..10) { emit(i) } }.map { delay(100) it * it }

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.


public interface StateFlow<out T> : SharedFlow<T> { public val value: T }
public interface MutableStateFlow<out T>: StateFlow<T>, MutableSharedFlow<