WorkManager für Kotlin: Komplettguide 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 WorkManager für Kotlin

WorkManager ist eine Bibliothek von Google für Android, die für die Ausführung von Hintergrundaufgaben entwickelt wurde, die garantiert ausgeführt werden – selbst nach einem Geräteneustart oder wenn die App geschlossen wurde. Sie ist Teil von Android Jetpack und bietet eine einfache und zuverlässige API zum Planen von verzögerten, periodischen und einmaligen Aufgaben.

Das Hauptziel von WorkManager ist es, veraltete Mechanismen für Hintergrundarbeit wie Service oder AsyncTask zu ersetzen und die Kompatibilität mit verschiedenen Android-Versionen (ab API 14+) sicherzustellen. Die Bibliothek wählt automatisch die optimale Methode zur Aufgabenausführung: JobScheduler (API 23+), AlarmManager + BroadcastReceiver (ältere Versionen) oder Firebase JobDispatcher (falls eingebunden).

WorkManager eignet sich ideal für Szenarien wie: Datensynchronisation mit dem Server, Senden von Analysedaten, Dateidownloads, Bildverarbeitung, Backups, Senden von Push-Benachrichtigungen und alle anderen Aufgaben, die keine sofortige Ausführung erfordern, aber innerhalb kurzer Zeit abgeschlossen sein müssen.

WorkManager einrichten

WorkManager wird nicht über pip oder npm installiert, da es sich um eine Bibliothek für Android (Kotlin/Java) handelt. Um sie zu Ihrem Projekt hinzuzufügen, müssen Sie die Datei build.gradle (Modulebene) bearbeiten.

Schritt 1: Öffnen Sie die Datei build.gradle Ihres Moduls (app/build.gradle).

Schritt 2: Fügen Sie die Abhängigkeit im dependencies-Block hinzu:

dependencies {
    implementation "androidx.work:work-runtime-ktx:2.9.0"
}

Schritt 3: Synchronisieren Sie das Projekt (Sync Now).

Wenn Sie Kotlin DSL verwenden, sieht die Abhängigkeit so aus:

dependencies {
    implementation("androidx.work:work-runtime-ktx:2.9.0")
}

Wichtig: Version 2.9.0 ist die zum Zeitpunkt der Erstellung dieses Artikels aktuelle Version. Es wird empfohlen, die neueste Version auf der offiziellen Android Developers-Website zu überprüfen.

Schnellstart mit Codebeispiel

Betrachten wir ein einfaches Beispiel: Wir erstellen eine Hintergrundaufgabe, die einen Logeintrag in Logcat ausgibt.

Schritt 1: Worker-Klasse erstellen

import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.WorkerParameters

class SimpleWorker(context: Context, params: WorkerParameters) : Worker(context, params) {

    override fun doWork(): Result {
        Log.d("SimpleWorker", "Hintergrundaufgabe ausgeführt!")
        // Hier kann jede langlaufende Operation ausgeführt werden
        return Result.success()
    }
}

Schritt 2: Aufgabenausführung planen

import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager

val workRequest = OneTimeWorkRequestBuilder<SimpleWorker>()
    .build()

WorkManager.getInstance(context).enqueue(workRequest)

Nach dem Aufruf von enqueue() wird die Aufgabe in Kürze ausgeführt (normalerweise innerhalb weniger Sekunden, sofern keine Einschränkungen vorliegen).

Wichtige Methoden und Funktionen von WorkManager

1. OneTimeWorkRequestBuilder

Funktion: Erstellt eine einmalige Arbeitsanfrage. Die Aufgabe wird einmal ausgeführt und dann aus der Warteschlange entfernt.

Parameter:

  • workerClass (erforderlich) – Klasse, die von Worker oder CoroutineWorker erbt.
  • setInitialDelay() – Verzögerung vor der Ausführung (in Millisekunden).
  • setConstraints() – Einschränkungen (z. B. Internetverbindung).
  • addTag() – Tag zum Gruppieren von Aufgaben.
  • setInputData() – Eingabedaten für den Worker.

Beispiel:

val request = OneTimeWorkRequestBuilder<MyWorker>()
    .setInitialDelay(10, TimeUnit.SECONDS)
    .setConstraints(Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .build())
    .addTag("sync")
    .build()

2. PeriodicWorkRequestBuilder

Funktion: Erstellt eine periodische Arbeitsanfrage, die in regelmäßigen Abständen wiederholt wird.

Parameter:

  • repeatInterval (erforderlich) – Zeitintervall zwischen den Ausführungen.
  • repeatIntervalTimeUnit (erforderlich) – Zeiteinheit (z. B. TimeUnit.MINUTES).
  • setConstraints() – Einschränkungen wie bei OneTimeWorkRequestBuilder.

Beispiel:

val periodicRequest = PeriodicWorkRequestBuilder<SyncWorker>(15, TimeUnit.MINUTES)
    .setConstraints(Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .build())
    .build()

WorkManager.getInstance(context).enqueue(periodicRequest)

3. WorkManager.enqueue()

Funktion: Fügt eine Arbeitsanfrage zur Ausführungswarteschlange hinzu. Die Aufgabe wird so schnell wie möglich unter Berücksichtigung aller Einschränkungen ausgeführt.

Beispiel:

WorkManager.getInstance(context).enqueue(workRequest)

4. WorkManager.cancelWorkById()

Funktion: Bricht eine bestimmte Aufgabe anhand ihrer eindeutigen ID ab.

Beispiel:

val workId = workRequest.id
WorkManager.getInstance(context).cancelWorkById(workId)

5. WorkManager.getWorkInfoById()

Funktion: Ruft den aktuellen Status einer Aufgabe ab (z. B. SUCCEEDED, FAILED, RUNNING).

Beispiel:

val workInfo = WorkManager.getInstance(context).getWorkInfoById(workId)
if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
    Log.d("WorkManager", "Aufgabe erfolgreich abgeschlossen")
}

6. Constraints

Funktion: Definiert Bedingungen, die erfüllt sein müssen, bevor eine Aufgabe ausgeführt wird.

Mögliche Einschränkungen:

  • setRequiredNetworkType() – Erforderlicher Netzwerktyp (z. B. NetworkType.CONNECTED).
  • setRequiresBatteryNotLow() – Akku darf nicht schwach sein.
  • setRequiresCharging() – Gerät muss laden.
  • setRequiresDeviceIdle() – Gerät muss im Ruhezustand sein.
  • setRequiresStorageNotLow() – Speicherplatz darf nicht knapp sein.

Beispiel:

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .setRequiresCharging(true)
    .build()

val request = OneTimeWorkRequestBuilder<MyWorker>()
    .setConstraints(constraints)
    .build()

Fazit

WorkManager ist eine leistungsstarke und flexible Bibliothek für die Planung und Ausführung von Hintergrundaufgaben in Android. Sie vereinfacht die Entwicklung erheblich, indem sie die Komplexität der verschiedenen Android-Versionen und Gerätezustände abstrahiert. Mit den vorgestellten Methoden und Beispielen können Sie sofort mit der Implementierung Ihrer eigenen Hintergrundaufgaben beginnen. Experimentieren Sie mit verschiedenen Einschränkungen und Intervallen, um die optimale Lösung für Ihre App zu finden.

Empfehlungen