StateFlow und SharedFlow
Stellen Sie reaktiven Zustand aus Ihrer App bereit.
StateFlow und SharedFlow ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Heiße Flows
Im Gegensatz zu kalten Flows sind StateFlow und SharedFlow heiß: Sie existieren unabhängig von Collectors und können von vielen geteilt werden.
StateFlow ist ein Status-Container
Ein StateFlow enthält immer einen aktuellen Wert. Neue Collector erhalten sofort den neuesten Wert. Daher eignet er sich ideal für den UI-Status.
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()StateFlow aktualisieren
Setzen Sie .value direkt oder verwenden Sie update für eine atomare Lese-Änderungs-Schreib-Operation.
_count.value++
// or, atomically:
_count.update { it + 1 }StateFlow fasst Werte zusammen und entfernt Duplikate
StateFlow behält nur den neuesten Wert (Konflation) und überspringt die Ausgabe, wenn der neue Wert dem alten entspricht. Dadurch werden redundante UI-Aktualisierungen vermieden.
SharedFlow für Ereignisse
Ein SharedFlow benötigt keinen aktuellen Wert und kann eine konfigurierbare Anzahl vergangener Ausgaben erneut ausgeben. Er eignet sich für einmalige Ereignisse wie Navigation oder das Anzeigen einer Snackbar.
private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()Ereignisse ausgeben
Geben Sie Ereignisse aus einer Coroutine in einen SharedFlow aus.
fun onSave() {
viewModelScope.launch {
_events.emit("Saved!")
}
}Warum StateFlow nicht für Ereignisse verwenden
StateFlow behält den letzten Wert. Ein Collector, der sich nach einer Rotation erneut anmeldet, würde daher das alte Ereignis erneut empfangen und beispielsweise zweimal navigieren. SharedFlow gibt Ereignisse standardmäßig nicht erneut aus.
SharedFlow konfigurieren
Passen Sie replay und extraBufferCapacity an, um das Puffern und das Verhalten bei Rückstau zu steuern.
MutableSharedFlow<String>(
replay = 0,
extraBufferCapacity = 1
)Einen kalten Flow in StateFlow umwandeln
Verwenden Sie stateIn, um den vorgelagerten kalten Flow in einen gemeinsamen, an das ViewModel gebundenen StateFlow umzuwandeln.
val uiState = repo.stream()
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Zwischen den beiden wählen
- StateFlow → aktueller Status des Bildschirms (enthält immer einen Wert).
- SharedFlow → vorübergehende Ereignisse (einmalige Ausgabe).
Beide sammeln
Sammeln Sie StateFlow in Compose mit collectAsStateWithLifecycle. Sammeln Sie SharedFlow-Ereignisse innerhalb eines LaunchedEffect, um sie einmalig zu verarbeiten.
LaunchedEffect(Unit) {
vm.events.collect { msg -> showSnackbar(msg) }
}Kurzer Test
Testen Sie Ihr Verständnis von StateFlow und SharedFlow.
Rückblick
Sie haben gelernt:
- StateFlow ist ein heißer, zusammengeführter Zustandshalter mit einem aktuellen Wert.
- SharedFlow ist ein heißer Ereignisstrom mit konfigurierbarem Replay.
- Verwenden Sie StateFlow für Zustände und SharedFlow für einmalige Ereignisse.
stateInwandelt kalte Flows in StateFlow um.
Lerne Kotlin mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 36
- Lektionen
- 152
Häufig gestellte Fragen
Ist die Lektion „StateFlow und SharedFlow“ kostenlos?
Ja — der vollständige Text von „StateFlow und SharedFlow“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „StateFlow und SharedFlow“?
Stellen Sie reaktiven Zustand aus Ihrer App bereit. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Android Academy zu starten?
Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „StateFlow und SharedFlow“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?
Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Grundlagen und Scopes von Coroutines
- viewModelScope und Dispatchers
- Grundlagen von Kotlin Flow
- StateFlow und SharedFlow