Asynchrone Programmierung in Kotlin: Vollständiger Leitfaden für Anfänger

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

Asynchrone Programmierung in Kotlin: Vollständiger Leitfaden für Anfänger

\n\n

Moderne Anwendungen erfordern zunehmend die gleichzeitige Ausführung mehrerer Aufgaben: Laden von Daten aus dem Netzwerk, Arbeiten mit Datenbanken, Verarbeiten von Benutzereingaben. In der Sprache Kotlin wird hierfür die asynchrone Programmierung verwendet, die auf Coroutinen (coroutines) basiert. Dies ist ein leistungsstarkes und elegantes Werkzeug, das es ermöglicht, nicht-blockierenden Code ohne komplexe Callbacks zu schreiben.

\n\n

In diesem Artikel behandeln wir die Grundlagen der asynchronen Programmierung in Kotlin: Was sind Coroutinen, wie verwendet man launch, async und await, und wir lernen Dispatcher und Fehlerbehandlung kennen. Das Material richtet sich an Anfänger-Entwickler, die bereits mit den Grundlagen der Kotlin-Syntax vertraut sind.

\n\n

Was sind Coroutinen und warum werden sie benötigt?

\n\n

Eine Coroutine ist ein leichtgewichtiger Ausführungsstrang, der angehalten und wieder fortgesetzt werden kann, ohne den Hauptthread zu blockieren. Im Gegensatz zu traditionellen Threads sind Coroutinen nicht an Systemressourcen gebunden und können in einem einzigen Thread ausgeführt werden, wobei sie zwischen sich umschalten.

\n\n

Die wichtigsten Vorteile von Coroutinen:

\n
    \n
  • Leichtgewichtigkeit — Tausende von Coroutinen können gestartet werden, ohne nennenswerten Speicherverbrauch.
  • \n
  • Anhalten (suspend) — Eine Funktion kann ihre Ausführung "einfrieren", ohne den Thread zu blockieren.
  • \n
  • Strukturierte Nebenläufigkeit — Coroutinen verwalten automatisch ihren Lebenszyklus.
  • \n
  • Einfachheit — Der Code sieht aus wie synchroner Code, ohne verschachtelte Callbacks.
  • \n
\n\n

Um mit Coroutinen zu arbeiten, muss eine Abhängigkeit in build.gradle.kts hinzugefügt werden:

\n\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")\n}
\n\n

Grundlegende Bausteine: launch, async und suspend

\n\n

Die suspend-Funktion

\n\n

Jede Funktion, die die Ausführung einer Coroutine anhalten kann, wird mit dem Schlüsselwort suspend markiert. Solche Funktionen können nur innerhalb einer Coroutine oder einer anderen suspend-Funktion aufgerufen werden.

\n\n
suspend fun fetchUserData(): String {\n    delay(1000) // Verzögerung simulieren\n    return "User data loaded"\n}
\n\n

Die Funktion delay() ist das Äquivalent zu Thread.sleep(), jedoch ohne den Thread zu blockieren.

\n\n

launch — Starten einer Coroutine ohne Ergebnis

\n\n

Der Builder launch startet eine neue Coroutine, die kein Ergebnis zurückgibt (gibt ein Job zurück). Wird für Aufgaben vom Typ "Starten und Vergessen" verwendet.

\n\n
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n    launch {\n        println("Coroutine 1 gestartet")\n        delay(1000)\n        println("Coroutine 1 beendet")\n    }\n    println("Hauptthread arbeitet weiter")\n}
\n\n

Ausgabe:

\n
Hauptthread arbeitet weiter\nCoroutine 1 gestartet\nCoroutine 1 beendet
\n\n

Beachten Sie: runBlocking wird nur in Lehrbeispielen oder an Einstiegspunkten (z. B. in main()) verwendet. In realen Anwendungen (Android, Server) muss es nicht verwendet werden.

\n\n

async und await — Ergebnis abrufen

\n\n

Wenn eine Coroutine ein Ergebnis zurückgeben soll, wird der Builder async verwendet. Er gibt ein Objekt Deferred<T> zurück, aus dem der Wert mit await() abgerufen werden kann.

\n\n
fun main() = runBlocking {\n    val deferredResult: Deferred<String> = async {\n        delay(1500)\n        "Ergebnis der Berechnung"\n    }\n\n    println("Warte auf Ergebnis...")\n    val result = deferredResult.await()\n    println("Ergebnis erhalten: $result")\n}
\n\n

Ausgabe:

\n
Warte auf Ergebnis...\nErgebnis erhalten: Ergebnis der Berechnung
\n\n

Mit async können mehrere parallele Aufgaben gestartet werden:

\n\n


                
                

Blogs

Buchempfehlungen