Sobes.tech
Middle+

Č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")
}