Android Jetpack WorkManager automatisiert Aufgaben im Hintergund

Die API fĂĽr das AusfĂĽhren von Hintergrund-Tasks unter BerĂĽcksichtigung von Akkustand und Netzwerkstatus hat Version 1.0 erreicht.

vorlesen Druckansicht 2 Kommentare lesen
Android Jetpack WorkManager automatisierte Aufgaben im Hintergund
Lesezeit: 3 Min.
Inhaltsverzeichnis

Google hat mit WorkManager 1.0 eine Bibliothek veröffentlicht, die das Erledigen zurückgestellter Aufgaben automatisiert. Mit der ersten Hauptversion gilt die unter Android Jetpack aufgehängte API als stabil. WorkManager ist rückwärtskompatibel bis zu API Level 14 und damit zu Endgeräten, die Android 4.0 verwenden.

Im Rahmen der Google I/O 2018 hatte der Internetriese die Komponentensammlung Android Jetpack erstmals vorgestellt und im Zuge dessen auch den WorkManager angekĂĽndigt. Er ist auf Hintergrund-Tasks ausgelegt, die zeitversetzt ablaufen dĂĽrfen, wie das Synchronisieren mit einem Backend oder dem Hochladen von Log-Daten. Dagegen ist er explizit ist nicht dafĂĽr Aufgaben gedacht, die direkt beziehungsweise zeitnah erfolgen sollen wie das Senden einer Direktnachricht.

Der WorkManager automatisiert die Aufgaben unter Berücksichtigung des Netzwerkstatus und des Akkustands beziehungsweise Ladevorgangs. Entwickler steuern die Vorgaben und können beispielsweise mit folgenden Zeilen:

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

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

festlegen, dass der WorkManager den Task nur dann anstößt, wenn das Endgerät eine Netzwerkverbindung hat (NetworkType.CONNECTED) und am Ladekabel hängt (setRequiresCharging(true)).

Android bietet von Hause aus APIs zum Erledigen von Aufgaben im Hintergrund sowie zum Abfragen diverser Parameter. Allerdings ändern sich die Aufrufe und verfügbaren Schnittstellen. WorkManager arbeitet je nach Android-Variante mit unterschiedlichen APIs zusammen, die Entwickler ohne die Abstraktionsschicht direkt ansprechen müssten. Ab Android 6, das API Level 23 entspricht, verwendet er den JobScheduler. Auf älteren Android-Varianten kommt stattdessen eine Kombination aus dem AlarmManager und dem BroadcastReceiver zum Einsatz.

Entwickler können sowohl einmalige als auch wiederholte Tasks als OneTimeWorkRequest respektive PeriodicWorkRequest anlegen. Über den WorkManager angelegte, nicht erledigte Aufgaben bleiben auch dann aktiv, wenn Nutzer ihr Endgerät neu starten.

Voneinander abhängige Aufgaben lassen sich verketten und je nach Typ entweder in der passenden Reihenfolge oder parallel abarbeiten, wie folgender Code aus der Dokumentation zeigt:

WorkManager.getInstance()
// Kandidaten fĂĽr die Parallelverarbeitung
.beginWith(listOf(filter1, filter2, filter3))
// Davon abhängige Aufgaben, die nur nach dem Erledigen
// der jeweils vorherigen Aufgaben ablaufen
.then(compress)
.then(upload)
// Abarbeitung im Hintergrund-Thread einreihen
.enqueue()

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmung wird hier ein externes Video (TargetVideo GmbH) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (TargetVideo GmbH) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

Zum Einsatz im Projekt binden Entwickler die WorkManager-API aus dem Google Maven Repository ĂĽber die passenden Dependencys in build.gradle ein:

dependencies {
def work_version = 1.0.0
// Java
implementation "android.arch.work:work-runtime:$work_version"
// Kotlin KTX + coroutines
implementation "android.arch.work:work-runtime-ktx:$work_version"
}

Weitere Details lassen sich dem Android-Entwicklerblog entnehmen. Eine Ăśbersicht findet sich auf der Projektseite. Dort sind neben einer EinfĂĽhrung diverse Anleitungen zu finden. (rme)