Aufgabenplanung

Wenn Sie Aufgaben ausführen möchten, die auch dann weiterlaufen, wenn die App nicht mehr sichtbar ist, empfehlen wir die Verwendung der Jetpack-Bibliothek WorkManager. WorkManager bietet einen robusten Planungsmechanismus, mit dem Aufgaben auch nach Neustarts der App und des Geräts beibehalten werden.

Arbeitsarten

WorkManager verarbeitet drei Arten von Aufgaben:

  • Sofort: Aufgaben, die sofort beginnen und bald abgeschlossen werden müssen. Kann beschleunigt werden.
  • Lange Ausführungszeit: 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 Aufgaben zusammenhängen.

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

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

Eingeben Periodizität Zugriff
Sofort Einmal OneTimeWorkRequest und Worker. Bei dringenden Anliegen 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.

WorkManager-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 Arbeiten planen, die einmalig oder wiederholt in flexiblen Zeitfenstern ausgeführt werden. 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 Arbeitsvorgängen

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

In dieser Tabelle sehen Sie, wie WorkManager mit ähnlichen APIs zusammenhängt. Anhand dieser Informationen können Sie die richtige API für die Anforderungen Ihrer App auswählen.

API Empfohlen für Beziehung zu WorkManager
Coroutinen Alle asynchronen Vorgänge, die nicht beibehalten werden müssen, wenn die App nicht mehr sichtbar ist. Coroutinen sind die Standardmethode, um den Hauptthread in Kotlin zu verlassen. Sie werden jedoch beendet, sobald die App geschlossen wird. Verwenden Sie WorkManager für Aufgaben, die auch nach dem Schließen der App fortgesetzt werden sollen.
AlarmManager Nur Wecker. Im Gegensatz zu regulären WorkManager-Workern können genaue Alarme von AlarmManager ein Gerät aus dem Inaktivmodus wecken. Daher ist es in Bezug auf Strom- und Ressourcenmanagement nicht effizient. Verwenden Sie sie nur für genaue Alarme oder Benachrichtigungen wie Kalendertermine, nicht für wiederkehrende Hintergrundaufgaben.

Verworfene 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 können.

Zusätzliche Ressourcen

In den folgenden Abschnitten finden Sie einige zusätzliche Ressourcen.

Videos

Blogs

Produktproben