Flow für Kotlin: Vollständiges Tutorial mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in Flow: Was ist das und wozu braucht man es?

Flow ist eine Bibliothek für die Arbeit mit reaktiven Datenströmen (reactive streams) in der Programmiersprache Kotlin. Sie ist Teil der Kotlin Coroutines-Ökosystems und bietet eine leistungsstarke, typsichere und asynchrone Möglichkeit zur Verarbeitung von Datensequenzen, die im Laufe der Zeit erzeugt werden.

Im Gegensatz zu normalen Collections (List, Set), die alle Elemente sofort im Speicher halten, ist Flow ein kalter Strom (cold stream). Das bedeutet, dass Daten erst dann generiert werden, wenn ein Abonnent (collector) vorhanden ist. Flow eignet sich ideal für:

  • Asynchrone Datenverarbeitung: Abrufen von Daten aus dem Netzwerk, einer Datenbank oder dem Dateisystem, ohne den Hauptthread zu blockieren.
  • Ereignisverarbeitung: Klicks, Mausbewegungen, UI-Updates.
  • Reaktive Programmierung: Erstellen von Daten-Transformationsketten (map, filter, flatMap) mit automatischer Fehlerbehandlung und Abbrechbarkeit.
  • Integration mit Coroutinen: Flow ist vollständig kompatibel mit Kotlin Coroutines, was die Kombination mit anderen asynchronen Operationen erleichtert.

Warum Flow anstelle von älteren Ansätzen (z. B. RxJava oder Callbacks) verwenden?

  • Einfachheit und Prägnanz: Die Flow-API ist minimalistisch und intuitiv für Kotlin-Entwickler.
  • Sicherheit: Typsicherheit auf Compiler-Ebene.
  • Integration mit Coroutinen: Nutzt alle Vorteile der strukturierten Nebenläufigkeit (structured concurrency).
  • Leistung: Leichtgewichtig und effizient, erzeugt keine überflüssigen Objekte.

Flow Installation

Flow ist Teil der Bibliothek kotlinx.coroutines. Um es zu nutzen, musst du die Abhängigkeit in deine build.gradle.kts-Datei (für Gradle) oder pom.xml (für Maven) einfügen.

Gradle (Kotlin DSL)

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
    // Für die Verwendung von Flow in Android (mit Lifecycle-Unterstützung)
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
}

Gradle (Groovy)

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1'
}

Maven


    org.jetbrains.kotlinx
    kotlinx-coroutines-core
    1.8.1

Wichtig: Stelle sicher, dass die Kotlin-Version und die Version von kotlinx-coroutines kompatibel sind. Die aktuelle Version findest du auf GitHub.

Schnellstart: Dein erster Flow

Lass uns einen einfachen Flow erstellen, der drei Zahlen mit einer Verzögerung ausgibt, und dann darauf abonnieren.

import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*

fun simpleFlow(): Flow<Int> = flow {
    println("Flow gestartet")
    for (i in 1..3) {
        delay(100) // Simuliert asynchrone Arbeit
        emit(i)    // Gibt den Wert aus
    }
}

fun main() = runBlocking {
    println("Hauptthread: ${Thread.currentThread().name}")

    // Abonniere den Flow (sammle die Daten)
    simpleFlow().collect { value ->
        println("Erhalten: $value")
    }

    println("Flow beendet")
}

Ausgabe:

Hauptthread: main
Flow gestartet
Erhalten: 1
Erhalten: 2
Erhalten: 3
Flow beendet

Erklärung:

  • flow { ... } — erstellt einen kalten Strom

Empfehlungen