Sobes.tech
Junior — Middle

Jak se liší Flow, StateFlow a SharedFlow v kontextu reaktivního programování?

sobes.tech AI

Odpověď od AI

V kontextu reaktivního programování v Kotlinu (zejména na Androidu) jsou Flow, StateFlow a SharedFlow různé typy datových toků s různými vlastnostmi:

  • Flow: je studený tok, který začíná emitovat data pouze při odběru. Každý odběratel dostává data od začátku a data se mezi odběry neukládají.

  • StateFlow: je horký tok, který vždy uchovává aktuální stav (hodnotu). Při odběru obdrží odběratel okamžitě poslední hodnotu a poté všechny následující aktualizace. Používá se k reprezentaci stavu, který se může časem měnit.

  • SharedFlow: je horký tok, který může mít více odběratelů a ve výchozím nastavení neukládá stav (ale může být nakonfigurován s bufferem a retransmisí). Umožňuje přenášet události více odběratelům bez uchovávání poslední hodnoty.

Příklad:

val flow = flow {
    emit(1)
    delay(1000)
    emit(2)
}

val stateFlow = MutableStateFlow(0)
stateFlow.value = 1

val sharedFlow = MutableSharedFlow<Int>()
sharedFlow.emit(1)
  • Flow je vhodný pro sekvenční výpočty a jednorázové datové toky.
  • StateFlow pro ukládání a sledování stavu.
  • SharedFlow pro události, které je třeba přenášet více posluchačům, například navigace nebo zprávy.