StateFlow kontra SharedFlow
Vælg det rigtige hot stream til brugerfladen.
StateFlow kontra SharedFlow er en gratis Jetpack Compose Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Jetpack Compose Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.
Varme datastrømme til brugerfladen
Hvis du vil sende live-data ind i Compose, bruger du et varmt flow, der forbliver aktivt og udsender data, uanset om nogen indsamler dem i øjeblikket.
Mød StateFlow
En StateFlow indeholder altid præcis én aktuel værdi. Nye indsamlere modtager straks den seneste værdi, hvilket er perfekt til skærmtilstand. 📦
val count = MutableStateFlow(0)
count.value = 1Læs værdien når som helst
Fordi StateFlow gemmer ét element, kan du læse dens aktuelle værdi synkront via value-egenskaben uden at indsamle flowet.
val ui: StateFlow<UiState> = _ui
val now = ui.valueStateFlow springer dubletter over
En StateFlow udsender kun noget, når værdien faktisk ændrer sig. Hvis du sætter den til den samme værdi igen, sendes der intet til indsamlerne.
_count.value = 5
_count.value = 5 // no new emissionMød SharedFlow
En SharedFlow udsender hændelser til mange indsamlere, men har ingen påkrævet aktuel værdi. Den er beregnet til ting, der sker, ikke til vedvarende tilstand.
val events = MutableSharedFlow<String>()SharedFlow's gentagelsesbuffer
En SharedFlow kan gentage nogle få tidligere udsendelser for sene indsamlere. Med replay nul ser nye indsamlere kun fremtidige hændelser.
MutableSharedFlow<Int>(replay = 1)SharedFlow beholder dubletter
I modsætning til StateFlow udsender en SharedFlow enhver værdi, du sender, også gentagelser. To identiske tryk udløser to separate hændelser.
events.emit("tap")
events.emit("tap") // both deliveredTilstand kontra hændelser
Huskereglen er: Brug StateFlow til det, skærmen viser, og SharedFlow til engangshændelser som navigation eller en toast.
Eksponér skrivebeskyttede strømme
Behold et privat ændringsbart flow i ViewModel, og eksponér et skrivebeskyttet flow. Brugerfladen observerer det, men kan ikke ændre det.
private val _ui = MutableStateFlow(UiState())
val ui: StateFlow<UiState> = _uiStateFlow skal have en standardværdi
En StateFlow skal starte med en begyndelsesværdi, så brugerfladen altid har noget at vise. En SharedFlow kan starte tom.
MutableStateFlow(UiState(loading = true))Indsaml i Compose
Du omdanner begge flowtyper til Compose-tilstand med en indsamler. Med en StateFlow har skærmen data med det samme i den første frame.
val state by viewModel.ui.collectAsStateWithLifecycle()Hurtigt tjek
Forbind hvert flow med dets formål.
Opsummering: StateFlow kontra SharedFlow
Godt! StateFlow gemmer én aktuel værdi til skærmtilstand, mens SharedFlow udsender gentagelige hændelser med en valgfri gentagelsesbuffer. 🎯
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “StateFlow kontra SharedFlow” gratis?
Ja — hele teksten til “StateFlow kontra SharedFlow” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Jetpack Compose Academy-kurset, skal du opgradere til CoddyKit PRO. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “StateFlow kontra SharedFlow”?
Vælg det rigtige hot stream til brugerfladen. Du øver dig i Jetpack Compose Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Jetpack Compose Academy?
Der kræves ingen tidligere erfaring. Jetpack Compose Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “StateFlow kontra SharedFlow”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Jetpack Compose Academy-lektion?
Ja. Alle Jetpack Compose Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- StateFlow kontra SharedFlow
- Mapping og kombination af flows
- stateIn og WhileSubscribed
- Engangshændelser med Channels