Čo je SharedFlow a ako sa líši od StateFlow?
sobes.tech AI
Odpoveď od AI
SharedFlow a StateFlow sú oba typy tokov z knižnice kotlinx.coroutines, navrhnuté pre reaktívne programovanie a správu asynchrónnych tokov dát, ale majú odlišné ciele a správanie.
StateFlow je tok, ktorý vždy obsahuje aktuálny stav (hodnotu). Je podobný Observable s poslednou hodnotou, ktorú je možné získať kedykoľvek. StateFlow vždy uchováva jednu aktuálnu hodnotu a pri odberu ju okamžite emituje. Je vhodný na reprezentáciu stavu UI alebo iných dát, ktoré musia mať aktuálnu hodnotu.
SharedFlow je všeobecnejší tok, ktorý môže mať viacerých odberateľov a predvolene neuchováva stav. Môže byť nakonfigurovaný s bufferom a politikami opätovného vysielania (replay). SharedFlow sa používa na široké vysielanie udalostí, ktoré nemusia nevyhnutne mať aktuálnu hodnotu, ako sú udalosti navigácie, oznámenia alebo jednorazové signály.
Kľúčové rozdiely:
- StateFlow vždy obsahuje aktuálny stav, SharedFlow nie (ak replay=0).
- Pri odberu StateFlow okamžite emituje aktuálnu hodnotu, SharedFlow len ak je nakonfigurovaný s replay.
- SharedFlow je flexibilnejší a vhodnejší pre udalosti, StateFlow pre stav.
Príklad použitia StateFlow:
val stateFlow = MutableStateFlow(0)
// Aktualizácia stavu
stateFlow.value = 1
// Odber
stateFlow.collect { hodnota ->
println("Aktuálna hodnota: $hodnota")
}
Príklad SharedFlow s replay:
val sharedFlow = MutableSharedFlow<Int>(replay = 1)
// Vyslanie udalosti
sharedFlow.emit(42)
// Nový odberateľ dostane poslednú udalosť vďaka replay
sharedFlow.collect { udalosť ->
println("Prijatá udalosť: $udalost")
}