WorkManager — was ist das, API und Aufgabenplanung

Autor: IT Sectr Veröffentlicht: 2026-03-27 Lesezeit: 8 Min.

WorkManager ist eine Android-Jetpack-Bibliothek, die für die Ausführung von verzögerten und Hintergrundaufgaben mit garantierter Ausführung entwickelt wurde. Im Gegensatz zu Service oder JobScheduler übernimmt WorkManager die Verwaltung des Aufgabenlebenszyklus: Er startet bei Fehlern neu, passt sich an die Android-Version an und berücksichtigt Geräteeinschränkungen. Laut Android Developers, 2026 ist WorkManager die bevorzugte Lösung für die meisten Hintergrundoperationen in der modernen Android-Entwicklung.

Wichtige Punkte

  • WorkManager ist eine Jetpack-Bibliothek für Hintergrundaufgaben mit garantierter Ausführung, unabhängig von der Android-Version.
  • Worker ist die Basisklasse zur Definition der Hintergrundaufgabenlogik, die die Bibliothek in einem separaten Thread ausführt.
  • WorkRequest kann einmalig (OneTimeWorkRequest) und periodisch (PeriodicWorkRequest) mit einem Mindestintervall von 15 Minuten sein.
  • Aufgabenketten ermöglichen die sequenzielle oder parallele Ausführung mehrerer Worker.
  • Einschränkungen definieren die Startbedingungen: Akkuladung, Netzwerkverbindung, Speicherzustand.

Was ist WorkManager?

WorkManager ist Teil von Android Jetpack, einer Bibliothek zur Verwaltung von Hintergrundaufgaben, die garantiert ausgeführt werden müssen, unabhängig davon, ob die App im Vordergrund ist oder vom Benutzer geschlossen wurde. Die Bibliothek unterstützt API 14+ und wählt automatisch den geeigneten Ausführungsmechanismus aus: JobScheduler unter Android 5+, BroadcastReceiver + AlarmManager unter älteren Versionen.

Das Hauptmerkmal von WorkManager ist die garantierte Ausführung. Wenn eine Aufgabe aufgrund eines Geräteneustarts, einer App-Beendigung oder eines Absturzes nicht abgeschlossen wurde, startet WorkManager sie bei der nächsten Gelegenheit neu. Dies macht die Bibliothek zur idealen Wahl für ausführungskritische Aufgaben: Senden von Analysen, Datenbanksynchronisation, Hochladen von Protokollen.

Im Gegensatz zum Background Service erfordert WorkManager keine Thread- und Lebenszyklusverwaltung. Die Bibliothek selbst erstellt einen Thread-Pool, behandelt den Doze Mode, berücksichtigt die Android-Version und bietet eine einheitliche API unabhängig vom API-Level. Die Unterstützung für Coroutinen und RxJava ist über CoroutineWorker bzw. RxWorker verfügbar.

Zustandsüberwachung via LiveData

WorkManager bietet integrierte LiveData-Unterstützung zur Verfolgung von Aufgabenstatus. Die Methode getWorkInfoByIdLiveData gibt LiveData<WorkInfo> zurück, die bei jeder Zustandsänderung aktualisiert wird: ENQUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED. Dadurch können UI-Komponenten auf Änderungen reagieren, ohne den Planer manuell abfragen zu müssen, und dank Lifecycle-aware-Komponenten ohne Speicherlecks.

kotlin
WorkManager.getInstance(context)
    .getWorkInfoByIdLiveData(syncRequest.id)
    .observe(viewLifecycleOwner) { workInfo ->
        when (workInfo.state) {
            WorkInfo.State.SUCCEEDED ->
                showSuccess()
            WorkInfo.State.FAILED ->
                showError(workInfo.outputData)
            else ->
                showProgress()
        }
    }

Wie funktioniert WorkManager?

Die Architektur von WorkManager baut auf drei Basisklassen auf: Worker, WorkRequest und WorkManager. Worker enthält die Aufgabenlogik, WorkRequest beschreibt die Ausführungsparameter und WorkManager verwaltet die Warteschlange und Planung. Die Bibliothek verwendet eine interne Room-Datenbank, um den Status aller Aufgaben zu speichern.

Worker und WorkRequest

Worker ist eine abstrakte Klasse mit einer einzigen Methode doWork, die in einem Hintergrundthread aufgerufen wird. Die Methode gibt ListenableWorker.Result zurück — SUCCESS, FAILURE oder RETRY. WorkRequest verbindet den Worker mit Parametern: Timeout, Tag, Anfangsverzögerung und Einschränkungen.

kotlin
class SyncWorker(
    context: Context,
    params: WorkerParameters
) : Worker(context, params) {

    override fun doWork(): Result {
        return try {
            val api = RetrofitClient.api
            val response = api.syncData()
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

Planung über WorkManager

WorkManager plant Aufgaben einheitlich, unabhängig von der Android-Version. Beim Aufruf von enqueue speichert die Bibliothek die Aufgabe in Room, bewertet die aktuellen Bedingungen und wählt den optimalen Ausführungszeitpunkt. Unter der Haube kann JobScheduler, AlarmManager oder ein eigener Planer verwendet werden — der Entwickler muss sich darüber keine Gedanken machen.

kotlin
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setInitialDelay(15, TimeUnit.MINUTES)
    .addTag("sync")
    .build()

WorkManager.getInstance(context)
    .enqueue(syncRequest)

Arten von WorkRequest

WorkManager unterstützt zwei Arten von Ausführungsanfragen: einmalige und periodische. Die Wahl des Typs hängt vom Szenario ab: Die Aufgabe soll einmal ausgeführt werden oder in einem bestimmten Intervall wiederholt werden.

OneTimeWorkRequest

OneTimeWorkRequest ist für Aufgaben konzipiert, die einmal ausgeführt werden sollen. Dies kann das Senden eines Protokolls, die Datensynchronisation nach der Autorisierung oder das Herunterladen der Konfiguration beim ersten Start sein. Die Verzögerung wird über setInitialDelay und die Einschränkungen über setConstraints festgelegt.

PeriodicWorkRequest

PeriodicWorkRequest eignet sich für wiederkehrende Aufgaben mit einem Mindestintervall von 15 Minuten. Die Bibliothek garantiert, dass das Intervall zwischen den Ausführungen nicht kürzer als angegeben ist, kann aber aufgrund von Geräteeinschränkungen länger sein. Für Aufgaben mit einer Häufigkeit von weniger als 15 Minuten verwenden Sie Handler oder Timer im Foreground Service.

ParameterOneTimeWorkRequestPeriodicWorkRequest
Häufigkeiteinmaligwiederholt (min. 15 Min.)
Anzahl1 Ausführungbis zur Stornierung
VerzögerungsetInitialDelaysetInitialDelay
Kettenunterstütztnein
VerwendungDownload, SyncÜberwachung, Polling

Einschränkungen und Aufgabenketten einrichten

Einschränkungen in WorkManager ermöglichen es, Bedingungen festzulegen, unter denen eine Aufgabe gestartet werden kann: Netzwerkverbindung (NetworkType), Akkustand (batteryNotLow), Speicherzustand (StorageNotLow) und Ruhemodus (DeviceIdle). Die Aufgabe wird erst gestartet, wenn alle Einschränkungen erfüllt sind.

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

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

Ketten ermöglichen die Organisation der sequenziellen oder parallelen Ausführung von Aufgaben. beginWith startet eine Kette, then fügt den nächsten Worker hinzu, der nach erfolgreichem Abschluss des vorherigen ausgeführt wird. Für die parallele Ausführung verwenden Sie workManager.enqueue(listOf(request1, request2)).

kotlin
WorkManager.getInstance(context)
    .beginWith(compressWorker)
    .then(uploadWorker)
    .then(cleanupWorker)
    .enqueue()
    // compress -> upload -> cleanup sequenziell

Migration von JobScheduler zu WorkManager

JobScheduler wurde in Android 5 (API 21) als Systemdienst zur Planung von Hintergrundaufgaben eingeführt. WorkManager kam als Ersatz und bietet eine plattformübergreifende API mit automatischer Migration und zusätzlichen Funktionen: Ketten, Ausführungsgarantie, Tags, Zustandsüberwachung via LiveData.

Bei der Migration von JobScheduler zu WorkManager müssen Sie JobService in Worker umwandeln, JobInfo durch WorkRequest und Context.getSystemService durch die WorkManager-API ersetzen. WorkManager behandelt Kompatibilitätsprobleme automatisch und verarbeitet den Doze Mode korrekter als eine manuelle JobScheduler-Implementierung. Migrationsschritte: 1) Worker-Klasse erstellen, 2) WorkRequest mit denselben Bedingungen erstellen, 3) JobService und JobInfo aus Code und Manifest entfernen.

UniqueWork für eindeutige Aufgaben

WorkManager unterstützt das Konzept eindeutiger Aufgaben über ExistingWorkPolicy. Wenn eine Aufgabe mit dem angegebenen Namen bereits vorhanden ist, bestimmt die Richtlinie das Verhalten: KEEP (keine neue erstellen), REPLACE (vorhandene ersetzen), APPEND (am Ende der Kette hinzufügen) und APPEND_OR_REPLACE. UniqueWorkRequest ist praktisch für Aufgaben, die nicht dupliziert werden sollen: Datenbanksynchronisation, Konfigurationsdownload, Analyse-Batch-Versand.

kotlin
WorkManager.getInstance(context)
    .enqueueUniqueWork(
        "sync_data",
        ExistingWorkPolicy.KEEP,
        syncRequest
    )

Fortschritts- und Zwischenergebnisverwaltung

CoroutineWorker unterstützt den setProgress-Mechanismus, mit dem Zwischenergebnisse der Ausführung übergeben werden können. Dies ist nützlich für langlaufende Operationen: großer Dateidownload, Batch-Bildverarbeitung, Datenbankmigration. Die UI kann Updates über getWorkInfosByTagLiveData abonnieren und den Fortschritt in Echtzeit anzeigen. Die Methode ForegroundInfo ist ebenfalls verfügbar, um einen Worker als Foreground Service mit einer Benachrichtigung auszuführen, wenn die Aufgabe für den Benutzer sichtbar sein soll.

kotlin
class ProgressWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        val total = 100
        for (i in 1..total) {
            setProgress(
                workDataOf("progress" to i)
            )
        }
        return Result.success()
    }
}

InputData und OutputData zur Datenübertragung

WorkManager unterstützt die Datenübertragung zwischen Workern über InputData und OutputData. InputData wird während der WorkRequest-Erstellung über Data.Builder erstellt und über inputData an den Worker übergeben. Nach der Ausführung erstellt der Worker OutputData über workDataOf oder Data.Builder und gibt es zusammen mit Result.success(outputData) zurück. Der nächste Worker in der Kette erhält das outputData des vorherigen als sein inputData. Daten werden im Schlüssel-Wert-Format mit Unterstützung für Basistypen gespeichert: String, Int, Long, Boolean, Double. Die maximale Datengröße beträgt 10 KB.

In der Praxis verwenden viele Projekte WorkManager als einzigen Planer für Hintergrundaufgaben. Google empfiehlt, alle vorhandenen JobService zu WorkManager zu migrieren, insbesondere in Apps, die Android 4.4 (API 19) und niedriger unterstützen, wo JobScheduler nicht verfügbar ist und WorkManager einen Fallback-Mechanismus über AlarmManager und BroadcastReceiver verwendet. Zum Testen stellt WorkManager TestListenableWorkerBuilder und TestWorkerBuilder zur Verfügung, mit denen Worker in JUnit-Tests ohne echten Planer getestet werden können.

Zum Testen von WorkManager verwenden Sie TestListenableWorkerBuilder aus AndroidX Test, mit dem Worker in einer isolierten Umgebung ausgeführt und das zurückgegebene Result überprüft werden kann. Die Bibliothek bietet vollständige JUnit- und Robolectric-Unterstützung für Unit-Tests ohne echten Planer. Insgesamt ist WorkManager für 80% der Aufgaben geeignet, bei denen zuvor Service oder JobScheduler verwendet wurden.

Häufig gestellte Fragen

Garantiert WorkManager die Aufgabenausführung nach einem Geräteneustart?

Ja, WorkManager garantiert die Ausführung auch nach einem Neustart. Die Bibliothek speichert alle unvollständigen Aufgaben in einer Room-Datenbank und stellt sie mit Hilfe von BroadcastReceiver wieder her, der nach dem Systemstart ausgelöst wird.

Was ist der Unterschied zwischen Worker, CoroutineWorker und RxWorker?

Worker läuft in einem Hintergrundthread ohne Coroutinen- oder RxJava-Unterstützung. CoroutineWorker verwendet Kotlin-Coroutinen mit Unterstützung für Suspend-Funktionen und Abbruch über den Coroutinen-Gültigkeitsbereich. RxWorker arbeitet mit Observable und Single und eignet sich für reaktive Ketten.

Wie storniere ich eine Aufgabe in WorkManager?

Verwenden Sie workManager.cancelWorkById(id) oder workManager.cancelAllWorkByTag("tag"). Die Bibliothek bietet auch die Methode cancelUniqueWork("name") zum Abbrechen eindeutiger Aufgaben mit dem angegebenen Namen.

Was ist das Mindestintervall für PeriodicWorkRequest?

Das Mindestintervall für PeriodicWorkRequest beträgt 15 Minuten. Diese Einschränkung wurde von Google festgelegt, um übermäßigen Batterieverbrauch zu verhindern. Wenn eine Aufgabe häufiger ausgeführt werden muss, verwenden Sie Foreground Service oder Handler mit einem Timer.

Unterstützt WorkManager Android 4.4 und niedriger?

Ja, WorkManager unterstützt API 14+. Auf Geräten ohne JobScheduler (unter API 21) verwendet die Bibliothek eine Kombination aus AlarmManager und BroadcastReceiver zur Aufgabenplanung. Dies macht WorkManager zu einer universellen Lösung für Hintergrundaufgaben.

Zusammenfassung

  • WorkManager ist eine moderne Jetpack-Bibliothek für Hintergrundaufgaben mit garantierter Ausführung auf allen Android-Versionen.
  • Drei Basisklassen — Worker, WorkRequest und WorkManager — decken alle Planungs- und Ausführungsszenarien ab.
  • Zwei Anfragetypen — OneTimeWorkRequest und PeriodicWorkRequest — für einmalige und wiederkehrende Aufgaben.
  • Einschränkungen (Netzwerk, Akku, Speicher) schützen die Aufgabe vor der Ausführung unter ungünstigen Bedingungen.
  • Aufgabenketten gewährleisten die sequenzielle Ausführung von Workern mit Ergebnisweitergabe.
  • CoroutineWorker und RxWorker unterstützen asynchrone Programmierung über Coroutinen und RxJava.
  • WorkManager ersetzt JobScheduler, Service und AlarmManager in den meisten Hintergrundaufgaben-Szenarien.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch