Aufgaben mit WorkManager planen   Teil von Android Jetpack.

WorkManager ist die empfohlene Lösung für persistente Aufgaben. Arbeit ist persistent, wenn sie auch nach Neustarts von Apps und des Systems geplant bleibt. Da die meisten Hintergrundprozesse am besten mit persistenten Aufgaben ausgeführt werden, ist WorkManager die primäre empfohlene API für die Hintergrundverarbeitung.

Arten von persistenten Aufgaben

WorkManager verarbeitet drei Arten von persistenten Aufgaben:

  • Sofort: Aufgaben, die sofort beginnen und bald abgeschlossen werden müssen. Kann beschleunigt werden.
  • Lange Ausführung: Aufgaben, die länger als 10 Minuten dauern können.
  • Aufschiebbar: Geplante Aufgaben, die zu einem späteren Zeitpunkt gestartet werden und regelmäßig ausgeführt werden können.

Abbildung 1 zeigt, wie die verschiedenen Arten von dauerhaften Arbeiten zusammenhängen.

Nichtflüchtige Aufgaben können sofort, lang andauernd oder aufschiebbar sein.
Abbildung 1: Arten von dauerhaften Aufgaben.

In der folgenden Tabelle sind die verschiedenen Arten von Arbeit aufgeführt.

Typ Regelmäßigkeit Zugriff
Sofort Einmal OneTimeWorkRequest und Worker.

Bei Express-Jobs rufen Sie setExpedited() in Ihrem OneTimeWorkRequest an.

Lange Ausführungszeit Einmalig oder regelmäßig Beliebige WorkRequest oder Worker. Rufen Sie setForeground() im Worker auf, um die Benachrichtigung zu verarbeiten.
Deferrable Einmalig oder regelmäßig PeriodicWorkRequest und Worker.

Weitere Informationen zum Einrichten von WorkManager finden Sie im Leitfaden WorkRequests definieren.

Funktionen

WorkManager bietet nicht nur eine einfachere und einheitlichere API, sondern auch eine Reihe weiterer wichtiger Vorteile:

Arbeitseinschränkungen

Definieren Sie die optimalen Bedingungen für die Ausführung Ihrer Arbeit deklarativ mithilfe von Arbeitsbeschränkungen. Sie können beispielsweise festlegen, dass die Synchronisierung nur ausgeführt wird, wenn das Gerät mit einem Netzwerk mit unbegrenztem Datenvolumen verbunden ist, wenn das Gerät inaktiv ist oder wenn der Akku ausreichend geladen ist.

Robuste Planung

Mit WorkManager können Sie Arbeit planen, die einmalig oder wiederholt in flexiblen Zeitfenstern ausgeführt werden soll. Arbeiten können auch getaggt und benannt werden. So können Sie einzigartige, austauschbare Arbeiten planen und Gruppen von Arbeiten gemeinsam überwachen oder abbrechen.

Geplante Aufgaben werden in einer intern verwalteten SQLite-Datenbank gespeichert. WorkManager sorgt dafür, dass diese Aufgaben beibehalten und nach einem Neustart des Geräts neu geplant werden.

Außerdem werden in WorkManager Energiesparfunktionen und Best Practices wie der Doze-Modus berücksichtigt.

Express-Job

Mit WorkManager können Sie sofortige Aufgaben für die Ausführung im Hintergrund planen. Verwenden Sie Expedited work für Aufgaben, die für den Nutzer wichtig sind und innerhalb weniger Minuten abgeschlossen werden.

Flexible Wiederholungsrichtlinie

Manchmal schlägt die Arbeit fehl. WorkManager bietet flexible Wiederholungsrichtlinien, einschließlich einer konfigurierbaren Richtlinie für exponentiellen Backoff.

Verkettung von Aufgaben

Bei komplexen zusammenhängenden Aufgaben können Sie einzelne Arbeitsaufgaben verketten. Dazu steht eine intuitive Benutzeroberfläche zur Verfügung, mit der Sie steuern können, welche Aufgaben sequenziell und welche parallel ausgeführt werden.

Kotlin

val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

Java

WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

Für jede Arbeitsaufgabe können Sie Ein- und Ausgabedaten definieren. Wenn Sie Arbeitsaufgaben verketten, übergibt WorkManager automatisch Ausgabedaten von einer Arbeitsaufgabe an die nächste.

Integrierte Interoperabilität für Threads

WorkManager lässt sich nahtlos in Coroutines und RxJava einbinden und bietet die Flexibilität, eigene asynchrone APIs einzubinden.

WorkManager für zuverlässige Aufgaben verwenden

WorkManager ist für Aufgaben vorgesehen, die zuverlässig ausgeführt werden müssen, auch wenn der Nutzer einen Bildschirm verlässt, die App beendet wird oder das Gerät neu gestartet wird. Beispiel:

  • Senden von Logs oder Analysen an Backend-Dienste.
  • Anwendungsdaten werden regelmäßig mit einem Server synchronisiert.

WorkManager ist nicht für die Hintergrundarbeit im Prozess vorgesehen, die sicher beendet werden kann, wenn der App-Prozess beendet wird. Es ist auch keine allgemeine Lösung für alle Aufgaben, die sofort ausgeführt werden müssen. Im Leitfaden zur Hintergrundverarbeitung finden Sie Informationen dazu, welche Lösung Ihren Anforderungen entspricht.

Beziehung zu anderen APIs

Obwohl Coroutinen für bestimmte Anwendungsfälle die empfohlene Lösung sind, sollten Sie sie nicht für dauerhafte Aufgaben verwenden. Es ist wichtig zu beachten, dass Coroutinen ein Framework für die Nebenläufigkeit sind, während WorkManager eine Bibliothek für persistente Aufgaben ist. Ebenso sollten Sie AlarmManager nur für Uhren oder Kalender verwenden.

API Empfohlen für Beziehung zu WorkManager
Coroutinen Alle asynchronen Vorgänge, die nicht persistent sein müssen. Coroutinen sind die Standardmethode, um den Hauptthread in Kotlin zu verlassen. Sie belegen jedoch Speicherplatz, wenn die App geschlossen wird. Verwenden Sie WorkManager für persistente Aufgaben.
AlarmManager Nur Wecker. Im Gegensatz zu WorkManager kann AlarmManager ein Gerät aus dem Inaktivmodus wecken. Daher ist es in Bezug auf Energie- und Ressourcenmanagement nicht effizient. Verwenden Sie sie nur für genaue Alarme oder Benachrichtigungen wie Kalendertermine, nicht für Hintergrundaufgaben.

Eingestellte APIs ersetzen

Die WorkManager API ist der empfohlene Ersatz für frühere Android-APIs für die Hintergrundplanung, einschließlich FirebaseJobDispatcher und GcmNetworkManager.

Erste Schritte

Im Startleitfaden erfahren Sie, wie Sie WorkManager in Ihrer App verwenden.

Zusätzliche Ressourcen

Weitere Informationen zu WorkManager finden Sie in den folgenden Ressourcen.

Produktproben

Videos

Blogs

  • Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
  • App-Start