Android Academy · Lektion

StateFlow och SharedFlow

Exponera reaktivt state från din app.

Lektion 4 av 413 steg

StateFlow och SharedFlow är en gratis lektion i Android Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Android Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Android Academy innehåller totalt 4 lektioner.

Heta flöden

Till skillnad från kalla flöden är StateFlow och SharedFlow heta: de existerar oberoende av insamlare och kan delas av många.

StateFlow är en tillståndshållare

Ett StateFlow innehåller alltid ett aktuellt värde. Nya insamlare får omedelbart det senaste värdet. Det passar perfekt för tillstånd i användargränssnittet.

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

Uppdatera StateFlow

Ange .value direkt eller använd update för en atomisk läsning-ändring-skrivning.

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

StateFlow slår ihop och avduplicerar värden

StateFlow behåller endast det senaste värdet (konflation) och hoppar över utskick om det nya värdet är lika med det gamla. Det undviker onödiga uppdateringar av användargränssnittet.

SharedFlow för händelser

Ett SharedFlow har inget obligatoriskt aktuellt värde och kan spela upp ett konfigurerbart antal tidigare utskick. Det passar engångshändelser som navigering eller visning av en snackbar.

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

Skicka ut händelser

Skicka ut värden till ett SharedFlow från en korutin.

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

Varför inte StateFlow för händelser

StateFlow behåller det senaste värdet, så en insamlare som prenumererar igen (efter en rotation) skulle få den gamla händelsen igen och till exempel navigera två gånger. SharedFlow spelar inte upp tidigare värden som standard.

Konfigurera SharedFlow

Justera replay och extraBufferCapacity för att styra buffring och beteendet vid backpressure.

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

Konvertera ett kallt Flow till StateFlow

Använd stateIn för att omvandla en kall uppströmskälla till ett delat StateFlow med ViewModel som scope.

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

Välja mellan dem

  • StateFlow → aktuellt tillstånd för skärmen (har alltid ett värde).
  • SharedFlow → tillfälliga händelser (körs en gång).

Samla in båda

Samla in StateFlow med collectAsStateWithLifecycle i Compose; samla in SharedFlow-händelser inuti en LaunchedEffect för att hantera dem en gång.

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

Snabbkontroll

Testa er förståelse av StateFlow och SharedFlow.

Sammanfattning

Ni har lärt er:

  • StateFlow är en het, sammanslagen tillståndshållare med ett aktuellt värde.
  • SharedFlow är en het händelseström med konfigurerbar replay.
  • Använd StateFlow för tillstånd och SharedFlow för engångshändelser.
  • stateIn konverterar kalla flöden till StateFlow.
Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
36
Lektioner
152

Vanliga frågor

Är lektionen ”StateFlow och SharedFlow” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Android Academy, inklusive ”StateFlow och SharedFlow”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Android Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”StateFlow och SharedFlow”?

Exponera reaktivt state från din app. Ni övar på Android Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Android Academy?

Du behöver inga förkunskaper. Utbildningen i Android Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”StateFlow och SharedFlow”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Android Academy-lektionen?

Ja. Varje Android Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i coroutines och scopes
  2. viewModelScope och Dispatchers
  3. Grunderna i Kotlin Flow
  4. StateFlow och SharedFlow
← Tillbaka till Android Academy