Jetpack Compose Academy · Lektion

StateFlow kontra SharedFlow

Vælg det rigtige hot stream til brugerfladen.

Lektion 1 af 413 trin

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 = 1

Læ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.value

StateFlow 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 emission

Mø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 delivered

Tilstand 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> = _ui

StateFlow 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. 🎯

Gratis at komme i gang

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

  1. StateFlow kontra SharedFlow
  2. Mapping og kombination af flows
  3. stateIn og WhileSubscribed
  4. Engangshændelser med Channels
← Tilbage til Jetpack Compose Academy