Sobes.tech
Junior — Middle

Чӣ гуна фарқият доранд Flow, StateFlow ва SharedFlow дар контексти барномасозии реактивӣ?

sobes.tech AI

Ҷавоб аз AI

Дар контексти барномаи реактивӣ дар Kotlin (хусусан дар Android), Flow, StateFlow ва SharedFlow намудҳои гуногуни ҷараёни маълумот бо хусусиятҳои гуногун мебошанд:

  • Flow: ин ҷараёни хунук аст, ки танҳо пас аз обуна шудан оғоз ба интиқол додани маълумот мекунад. Ҳар як обунакунанда маълумотҳоро аз оғоз мегирад ва маълумот байни обунаҳо нигоҳ дошта намешавад.

  • StateFlow: ин ҷараёни гарм аст, ки ҳамеша ҳолати ҳозира (қиматро) нигоҳ медорад. Ҳангоми обуна шудан, обунакунанда фавран охирин қиматро мегирад ва сипас ҳамаи навсозиро. Барои намояндагии ҳолате истифода мешавад, ки метавонад дар вақт тағир ёбад.

  • SharedFlow: ин ҷараёни гарм аст, ки метавонад чанд обуна дошта бошад ва ба таври пешфарз ҳолатро нигоҳ намедорад (аммо бо буфер ва такроррасонӣ танзимшаванда аст). Имкон медиҳад, ки ҳодисаҳо ба чанд обуна интиқол дода шаванд бе нигоҳ доштани қимати охирин.

Масалан:

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

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

val sharedFlow = MutableSharedFlow<Int>()
sharedFlow.emit(1)
  • Flow барои ҳисобҳои пайдарпай ва ҷараёнҳои маълумоти якдафъаина мувофиқ аст.
  • StateFlow барои нигоҳ доштани ва назорат кардани ҳолат.
  • SharedFlow барои ҳодисаҳо, ки бояд ба чанд шунаванда интиқол дода шаванд, масалан, навигатсия ё паёмҳо.