0Pricing
Android Academy · Lektion

collectAsStateWithLifecycle

Sammeln Sie Flows sicher mit dem Lifecycle.

collectAsStateWithLifecycle 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.

Flows sicher collecten

Wenn ein Composable einen Flow collectet, sollte es das Collecten beenden, solange der Bildschirm im Hintergrund ist, und es bei der Rückkehr fortsetzen.

Das passende Werkzeug dafür ist collectAsStateWithLifecycle().

Das Problem mit collectAsState

collectAsState() collectet weiter, solange sich das Composable in der Composition befindet — auch wenn die App im Hintergrund ist.

Dadurch können Ressourcen verschwendet und Aktualisierungen verarbeitet werden, die der Benutzer nicht sehen kann.

collectAsStateWithLifecycle kommt ins Spiel

Dieser lifecycle-bewusste Collector pausiert das Collecten, wenn der Lifecycle unter einen Zielzustand fällt (standardmäßig STARTED), und setzt es fort, sobald dieser wieder erreicht ist.

import androidx.lifecycle.compose.collectAsStateWithLifecycle

@Composable
fun Screen(vm: MyViewModel) {
    val state by vm.uiState
        .collectAsStateWithLifecycle()
    Text(state.title)
}

Die Abhängigkeit

Sie befindet sich im Artefakt androidx.lifecycle:lifecycle-runtime-compose. Fügen Sie es Ihrem Modul hinzu, damit der Import aufgelöst werden kann.

// build.gradle (module)
implementation(
  "androidx.lifecycle:lifecycle-runtime-compose:2.x.x"
)

Standardmäßiger Mindestzustand: STARTED

Standardmäßig ist das Collecten aktiv, solange der Lifecycle mindestens den Zustand STARTED hat — der Bildschirm also sichtbar ist. Wenn die App in den Hintergrund wechselt (unter STARTED), wird das Collecten ausgesetzt.

Mindestzustand anpassen

Sie können den Schwellenwert mit minActiveState ändern, beispielsweise in RESUMED.

val state by vm.uiState.collectAsStateWithLifecycle(
    minActiveState = Lifecycle.State.RESUMED
)

Mit StateFlow kombinieren

Das funktioniert perfekt mit dem StateFlow, den Sie aus einem ViewModel bereitstellen. Der Flow hat immer einen aktuellen Wert, sodass ein erneutes Collecten sofort den neuesten Zustand anzeigt.

private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow()

Warum dadurch Arbeit eingespart wird

Wenn Ihr Flow aufwendige Berechnungen ausführt (etwa eine große Liste filtert oder Streams transformiert), bedeutet das Aussetzen des Collectens im Hintergrund, dass diese Arbeit nicht ausgeführt wird, während der Benutzer die App verlassen hat.

Mit viewModelScope kombinieren

Auf der Produzentenseite führt das ViewModel seine Datenpipeline häufig in viewModelScope aus. Mit stateIn können Sie sogar dafür sorgen, dass der Upstream stoppt, wenn keine Collector vorhanden sind.

val uiState = repository.stream()
    .stateIn(
        scope = viewModelScope,
        started = SharingStarted.WhileSubscribed(5000),
        initialValue = UiState()
    )

WhileSubscribed erklärt

WhileSubscribed(5000) hält den Upstream 5 Sekunden lang aktiv, nachdem der letzte Collector beendet wurde. So wird vermieden, dass Arbeit bei kurzen Konfigurationsänderungen neu gestartet wird, während sie weiterhin beendet wird, wenn der Benutzer die App tatsächlich verlässt.

Zusammenfassung der Best Practices

Für Compose-Bildschirme mit einem ViewModel gilt:

  • Stellen Sie einen StateFlow bereit.
  • Collecten Sie mit collectAsStateWithLifecycle().
  • Verwenden Sie optional upstream stateIn(WhileSubscribed).

Kurzer Test

Testen Sie Ihr Verständnis des lifecycle-bewussten Collectens.

Zusammenfassung

Sie haben gelernt:

  • collectAsStateWithLifecycle() pausiert das Collecten im Hintergrund.
  • Der Standardschwellenwert ist STARTED und kann über minActiveState angepasst werden.
  • Kombinieren Sie es mit einem StateFlow und stateIn(WhileSubscribed) zu einer effizienten Pipeline.

Häufig gestellte Fragen

Ist die Lektion „collectAsStateWithLifecycle“ kostenlos?

Ja — der vollständige Text von „collectAsStateWithLifecycle“ 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 „collectAsStateWithLifecycle“?

Sammeln Sie Flows sicher mit dem Lifecycle. 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 „collectAsStateWithLifecycle“?

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

  1. Warum ein ViewModel verwenden?
  2. Zustand aus dem ViewModel bereitstellen
  3. Der Android-Lifecycle
  4. collectAsStateWithLifecycle
← Zurück zu Android Academy