StateFlow och SharedFlow
Exponera reaktivt state från din app.
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.
stateInkonverterar kalla flöden till StateFlow.
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
- Grunderna i coroutines och scopes
- viewModelScope och Dispatchers
- Grunderna i Kotlin Flow
- StateFlow och SharedFlow