SharedFlow nima va u StateFlow dan qanday farq qiladi?
sobes.tech AI
AIdan javob
SharedFlow va StateFlow ikkalasi ham kotlinx.coroutines kutubxonasidan kelib chiqadigan oqim turlaridir, reaktiv dasturlash va asinxron ma'lumot oqimlarini boshqarish uchun mo'ljallangan, ammo ular turli maqsadlar va xulq-atvorga ega.
StateFlow — bu doimo joriy holatni (qiymatni) saqlovchi oqim. U oxirgi qiymat bilan Observable ga o'xshaydi va istalgan vaqtda olinishi mumkin. StateFlow har doim joriy qiymatni saqlaydi va obuna bo'lganda darhol bu qiymatni chiqaradi. Bu UI holatini yoki boshqa joriy qiymatga ega bo'lishi kerak bo'lgan ma'lumotlarni ifodalash uchun qulay.
SharedFlow — bu ko'proq umumiy oqim bo'lib, bir nechta obunachiga ega bo'lishi mumkin va odatda holatni saqlamaydi. U bufer va qayta yuborish (replay) siyosatlari bilan sozlanishi mumkin. SharedFlow keng tarqaladigan voqealarni uzatish uchun ishlatiladi, ular joriy qiymatga ega bo'lishi shart emas, masalan, navigatsiya voqealari, bildirishnomalar yoki bir martalik signallar.
Asosiy farqlar:
- StateFlow har doim joriy holatni saqlaydi, SharedFlow — saqlamaydi (agar replay=0 bo'lsa).
- StateFlow obuna bo'lganda darhol joriy qiymatni chiqaradi, SharedFlow esa faqat replay bilan sozlangan bo'lsa.
- SharedFlow ko'proq moslashuvchan va voqealar uchun, StateFlow holat uchun mos.
StateFlow dan foydalanish misoli:
val stateFlow = MutableStateFlow(0)
// Holatni yangilash
stateFlow.value = 1
// Obuna bo'lish
stateFlow.collect { qiymat ->
println("Joriy qiymat: $qiymat")
}
Replay bilan SharedFlow misoli:
val sharedFlow = MutableSharedFlow<Int>(replay = 1)
// Voqeani yuborish
sharedFlow.emit(42)
// Yangi obunachi replay yordamida oxirgi voqeani oladi
sharedFlow.collect { voqea ->
println("Qabul qilingan voqea: $voqea")
}