Menü
Developer

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.

Von
vorlesen Drucken Kommentare lesen 2 Beiträge
Android Jetpack WorkManager automatisierte Aufgaben im Hintergund

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()
Einführung in die Funktionsweise von Jetpack WorkManager (Quelle: Android Developers)

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)