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 vonWorkeroderCoroutineWorkererbt.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 beiOneTimeWorkRequestBuilder.
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.
Auch in der Bibliothek
PDF-Generierung in C++: Überblick über Bibliotheken und Codebeispiele
Aufgabenwarteschlangen für JavaScript (Node.js): Bull, Bee-Queue, Kue
GORM für Go: Vollständiger Leitfaden mit Beispielen
Composer für PHP: Vollständiger Leitfaden mit Beispielen