Android Academy · leksjon

StateFlow og SharedFlow

Eksponer reaktiv tilstand fra appen Deres.

Leksjon 4 av 413 trinn

StateFlow og SharedFlow er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 4 leksjoner.

Varme strømmer

I motsetning til kalde strømmer er StateFlow og SharedFlow varme: De eksisterer uavhengig av innsamlere og kan deles av mange.

StateFlow er en tilstandsbeholder

En StateFlow inneholder alltid én gjeldende verdi. Nye innsamlere mottar umiddelbart den nyeste verdien. Den passer derfor perfekt for tilstanden til brukergrensesnittet.

private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()

Oppdatere StateFlow

Angi .value direkte, eller bruk update for en atomisk les–endre–skriv-operasjon.

_count.value++
// or, atomically:
_count.update { it + 1 }

StateFlow slår sammen og dedupliserer

StateFlow beholder bare den nyeste verdien (sammenflyting) og sender ikke ut en ny verdi hvis den er lik den forrige. Dette unngår overflødige oppdateringer av brukergrensesnittet.

SharedFlow for hendelser

En SharedFlow har ingen nødvendig gjeldende verdi og kan spille av et konfigurerbart antall tidligere utsendinger på nytt. Den passer for engangshendelser som navigering eller visning av en snackbar.

private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()

Sende ut hendelser

Send hendelser inn i en SharedFlow fra en coroutine.

fun onSave() {
    viewModelScope.launch {
        _events.emit("Saved!")
    }
}

Hvorfor ikke StateFlow for hendelser

StateFlow beholder den siste verdien, så en innsamler som abonnerer på nytt (etter en rotasjon), vil motta den gamle hendelsen på nytt og for eksempel navigere to ganger. SharedFlow unngår som standard å spille av hendelser på nytt.

Konfigurere SharedFlow

Juster replay og extraBufferCapacity for å styre bufring og håndtering av tilbakepress.

MutableSharedFlow<String>(
    replay = 0,
    extraBufferCapacity = 1
)

Konvertere en kald Flow til StateFlow

Bruk stateIn til å gjøre en kald oppstrøms-Flow om til en delt StateFlow med ViewModel som scope.

val uiState = repo.stream()
    .stateIn(
        viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState()
    )

Velge mellom dem

  • StateFlow → gjeldende tilstand for skjermen (har alltid en verdi).
  • SharedFlow → midlertidige hendelser (sendes ut én gang).

Samle inn begge

Samle inn StateFlow med collectAsStateWithLifecycle i Compose. Samle inn SharedFlow-hendelser i en LaunchedEffect for å håndtere dem én gang.

LaunchedEffect(Unit) {
    vm.events.collect { msg -> showSnackbar(msg) }
}

Hurtigsjekk

Test forståelsen Deres av StateFlow og SharedFlow.

Oppsummering

De har lært:

  • StateFlow er en varm, sammenflettet tilstandsbeholder med en gjeldende verdi.
  • SharedFlow er en varm hendelsesstrøm med konfigurerbar replay.
  • Bruk StateFlow for tilstand og SharedFlow for engangshendelser.
  • stateIn konverterer kalde flyter til StateFlow.
Gratis å komme i gang

Lær deg Kotlin med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
36
Leksjoner
152

Ofte stilte spørsmål

Er leksjonen «StateFlow og SharedFlow» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «StateFlow og SharedFlow», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «StateFlow og SharedFlow»?

Eksponer reaktiv tilstand fra appen Deres. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Android Academy?

Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «StateFlow og SharedFlow»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?

Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Grunnleggende om coroutines og scopes
  2. viewModelScope og Dispatchers
  3. Grunnleggende om Kotlin Flow
  4. StateFlow og SharedFlow
← Tilbake til Android Academy