0Pricing
Android Academy · Lektion

WorkManager und Hintergrundaufgaben

Planen Sie garantierte Hintergrundarbeit mit WorkManager. Verwenden Sie OneTimeWorkRequest, PeriodicWorkRequest, Einschränkungen, Datenübergabe und Verkettungen von Arbeitsschritten.

WorkManager und Hintergrundaufgaben ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 5 von 6. 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 6 Lektionen.

Hintergrundarbeit unter Android

Android schränkt Hintergrundarbeit stark ein, um Akku zu sparen. Vor WorkManager verwendeten Entwickler:

  • AsyncTask (veraltet)
  • AlarmManager (bei Neustarts und Doze nicht zuverlässig)
  • JobScheduler (komplexe API)
  • Services (können beendet werden, keine Wiederholung)

WorkManager ist die empfohlene Lösung für aufschiebbare, zuverlässig auszuführende Hintergrundarbeit.

Was ist WorkManager?

WorkManager stellt sicher, dass Ihre Arbeit ausgeführt wird, selbst wenn die App beendet oder das Gerät neu gestartet wird. Er:

  • Speichert Arbeit über Neustarts hinweg
  • Wiederholt fehlgeschlagene Aufgaben automatisch
  • Unterstützt Bedingungen (nur WLAN, nur beim Laden usw.)
  • Funktioniert ab API 14+
  • Integriert sich über CoroutineWorker in Kotlin Coroutines

Einrichtung

Fügen Sie WorkManager zu app/build.gradle hinzu:

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

Worker erstellen

Erweitern Sie CoroutineWorker und implementieren Sie doWork(). Geben Sie Result.success(), Result.failure() oder Result.retry() zurück:

class SyncWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        return try {
            // This runs on a background coroutine
            val repo = UserRepository(applicationContext)
            repo.syncFromNetwork()
            Result.success()
        } catch (e: Exception) {
            if (runAttemptCount < 3) Result.retry()
            else Result.failure()
        }
    }
}

OneTimeWorkRequest

Planen Sie eine einmalige Aufgabe und fügen Sie sie der Warteschlange hinzu:

val syncWork = OneTimeWorkRequestBuilder<SyncWorker>()
    .setInitialDelay(10, TimeUnit.MINUTES)  // optional delay
    .build()

WorkManager.getInstance(context).enqueue(syncWork)

// With a unique name (prevents duplicates):
WorkManager.getInstance(context).enqueueUniqueWork(
    "sync_work",
    ExistingWorkPolicy.KEEP,   // don't enqueue if already pending
    syncWork
)

PeriodicWorkRequest

Planen Sie sich wiederholende Aufgaben. Das Mindestintervall beträgt 15 Minuten:

val periodicSync = PeriodicWorkRequestBuilder<SyncWorker>(
    repeatInterval = 1, TimeUnit.HOURS
).build()

WorkManager.getInstance(context).enqueueUniquePeriodicWork(
    "hourly_sync",
    ExistingPeriodicWorkPolicy.KEEP,
    periodicSync
)

Bedingungen

Führen Sie Arbeit nur aus, wenn die Bedingungen erfüllt sind — Akku nicht schwach, WLAN verbunden usw.:

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.UNMETERED)  // WiFi only
    .setRequiresBatteryNotLow(true)
    .setRequiresCharging(false)
    .build()

val work = OneTimeWorkRequestBuilder<SyncWorker>()
    .setConstraints(constraints)
    .build()

WorkManager.getInstance(context).enqueue(work)

Eingabe- und Ausgabedaten

Übergeben Sie Daten an einen Worker und lassen Sie Daten von ihm zurückgeben, indem Sie Data-Objekte verwenden:

// Enqueue with input data:
val inputData = workDataOf("user_id" to 42)
val work = OneTimeWorkRequestBuilder<SyncWorker>()
    .setInputData(inputData)
    .build()

// Inside the Worker:
class SyncWorker(...) : CoroutineWorker(...) {
    override suspend fun doWork(): Result {
        val userId = inputData.getInt("user_id", -1)

        // Pass output data back:
        val output = workDataOf("synced_count" to 10)
        return Result.success(output)
    }
}

Arbeitsstatus beobachten

Beobachten Sie den Fortschritt mit getWorkInfoByIdLiveData:

val workRequest = OneTimeWorkRequestBuilder<SyncWorker>().build()
WorkManager.getInstance(this).enqueue(workRequest)

WorkManager.getInstance(this)
    .getWorkInfoByIdLiveData(workRequest.id)
    .observe(this) { info ->
        when (info?.state) {
            WorkInfo.State.RUNNING   -> binding.tvStatus.text = "Syncing..."
            WorkInfo.State.SUCCEEDED -> binding.tvStatus.text = "Done!"
            WorkInfo.State.FAILED    -> binding.tvStatus.text = "Failed"
            else                     -> {}
        }
    }

Arbeit verketten

Führen Sie Aufgaben mithilfe von Arbeitsketten nacheinander oder parallel aus:

val downloadWork  = OneTimeWorkRequestBuilder<DownloadWorker>().build()
val processWork   = OneTimeWorkRequestBuilder<ProcessWorker>().build()
val uploadWork    = OneTimeWorkRequestBuilder<UploadWorker>().build()

// Sequential: download → process → upload
WorkManager.getInstance(context)
    .beginWith(downloadWork)
    .then(processWork)
    .then(uploadWork)
    .enqueue()

// Parallel then merge:
WorkManager.getInstance(context)
    .beginWith(listOf(downloadWork, processWork))  // both run in parallel
    .then(uploadWork)                              // runs after both finish
    .enqueue()

WorkManager im Vergleich zu Alternativen

Wann Sie welches Werkzeug verwenden:

  • WorkManager — aufschiebbare, zuverlässig ausgeführte und bedingungsabhängige Arbeit. Ideal für Synchronisierungen, Uploads und Bereinigungen.
  • Coroutines / ViewModel — Arbeit, die an eine geöffnete App gebunden ist. Wird beendet, wenn die App beendet wird.
  • AlarmManager — Alarme zu einem exakt festgelegten Zeitpunkt (Kalendererinnerungen). Erfordert eine sorgfältige Akkuverwaltung.
  • Foreground Service — lang laufende Aufgaben, über die der Benutzer informiert ist (Musikwiedergabe, Navigation).

Kurzer Check

Wie lang ist das minimale Wiederholungsintervall für eine PeriodicWorkRequest?

Zusammenfassung: WorkManager

WorkManager ist das geeignete Werkzeug für zuverlässig auszuführende Hintergrundarbeit:

  • Erweitern Sie CoroutineWorker und implementieren Sie doWork()
  • Geben Sie Result.success(), .failure() oder .retry() zurück
  • Verwenden Sie OneTimeWorkRequest für einmalige Ausführungen und PeriodicWorkRequest für wiederkehrende
  • Fügen Sie Constraints für Nur-WLAN, Akkubedingungen usw. hinzu
  • Übergeben Sie Daten mit workDataOf()
  • Verketten Sie Aufgaben mit beginWith().then().enqueue()

Als Nächstes: Material-Design-Komponenten für ansprechende UIs.

Häufig gestellte Fragen

Ist die Lektion „WorkManager und Hintergrundaufgaben“ kostenlos?

Ja — der vollständige Text von „WorkManager und Hintergrundaufgaben“ 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 6 Lektionen.

Was lerne ich in „WorkManager und Hintergrundaufgaben“?

Planen Sie garantierte Hintergrundarbeit mit WorkManager. Verwenden Sie OneTimeWorkRequest, PeriodicWorkRequest, Einschränkungen, Datenübergabe und Verkettungen von Arbeitsschritten. 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 5 von 6.

Wie lange dauert die Lektion „WorkManager und Hintergrundaufgaben“?

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. Retrofit und REST-APIs
  2. Bilder mit Coil laden
  3. Fehlerbehandlung und UX
  4. Push-Benachrichtigungen
  5. WorkManager und Hintergrundaufgaben
  6. Veröffentlichen im Play Store
← Zurück zu Android Academy