Dauerhafte Arbeit Teil von Android Jetpack
Die Arbeit bleibt dauerhaft, wenn sie durch Anwendungsneustarts und Systemneustarts geplant bleibt. WorkManager ist die empfohlene Lösung für dauerhafte Arbeit. Da der Großteil der Hintergrundverarbeitung am besten mit hartnäckiger Arbeit erreicht wird, ist WorkManager auch die primär empfohlene API für die Hintergrundverarbeitung im Allgemeinen.
Arten von dauerhafter Arbeit
WorkManager übernimmt drei Arten von dauerhafter Arbeit:
- Sofort: Aufgaben, die sofort beginnen und bald abgeschlossen werden müssen. Kann beschleunigt werden.
- Lange Ausführung: Aufgaben, die länger, möglicherweise länger als 10 Minuten, ausgeführt werden.
- Zurückgestellt: Geplante Aufgaben, die zu einem späteren Zeitpunkt beginnen und regelmäßig ausgeführt werden.
In Abbildung 1 ist dargestellt, wie die verschiedenen Arten von persistenter Arbeit zueinander in Beziehung stehen.
Ebenso werden in der folgenden Tabelle die verschiedenen Arten von Arbeiten beschrieben.
Typ | Periodizität | Zugriff |
---|---|---|
Sofort | Einmalig | OneTimeWorkRequest und Worker . Wenn es um einen beschleunigten Vorgang geht, rufen Sie über Ihre OneTimeWorkRequest unter setExpedited() an. |
Langfristig | Einmal oder regelmäßig | Beliebige WorkRequest oder Worker . Rufen Sie setForeground() im Worker auf, um die Benachrichtigung zu verarbeiten. |
Kann zurückgestellt werden | Einmal oder regelmäßig | PeriodicWorkRequest und Worker . |
Weitere Informationen zum Einrichten von WorkManager finden Sie im Leitfaden WorkRequests definieren.
WorkManager-Funktionen
Neben der einfacheren und konsistenteren API bietet WorkManager noch eine Reihe weiterer wichtiger Vorteile:
Arbeitsbedingte Einschränkungen
Mithilfe von Arbeitseinschränkungen die optimalen Bedingungen für die Ausführung Ihrer Arbeit deklarativ definieren. Das Gerät wird beispielsweise nur ausgeführt, wenn es sich in einem kostenlosen Netzwerk befindet, wenn es inaktiv ist oder wenn der Akku ausreichend geladen ist.
Robuste Terminplanung
Mit WorkManager können Sie Aufgaben planen, die einmalig oder wiederholt in flexiblen Planungsfenstern ausgeführt werden. Arbeiten können ebenfalls getaggt und benannt werden, sodass Sie eindeutige, austauschbare Arbeiten planen und die Zusammenarbeit von Gruppen überwachen oder abbrechen können.
Geplante Arbeiten werden in einer intern verwalteten SQLite-Datenbank gespeichert. WorkManager sorgt dafür, dass diese Arbeit erhalten bleibt und bei Geräteneustarts neu geplant wird.
Darüber hinaus befolgt WorkManager die Energiesparfunktionen und Best Practices wie den Stromsparmodus, sodass Sie sich nicht darum kümmern müssen.
Expressarbeiten
Mit WorkManager können Sie sofort Arbeiten planen, die im Hintergrund ausgeführt werden sollen. Sie sollten Express-Arbeit für Aufgaben verwenden, 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 exponentiellen Backoff-Richtlinie.
Arbeitsverkettung
Bei komplexen Arbeiten können Sie über eine intuitive Benutzeroberfläche einzelne Arbeitsaufgaben miteinander verketten. So können Sie steuern, welche Teile nacheinander 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();
Sie können für jede Arbeitsaufgabe Eingabe- und Ausgabedaten dafür definieren. Beim Verketten von Arbeiten übergibt WorkManager automatisch die Ausgabedaten von einer Arbeitsaufgabe an die nächste.
Integrierte Threading-Interoperabilität
WorkManager lässt sich nahtlos in Coroutinen und RxJava einbinden und bietet die Flexibilität, eigene asynchrone APIs einzubinden.
WorkManager für zuverlässiges Arbeiten
WorkManager ist für Aufgaben gedacht, bei denen zuverlässig ausgeführt werden muss, selbst wenn der Nutzer einen Bildschirm verlässt, die App beendet oder das Gerät neu gestartet wird. Beispiel:
- Senden von Logs oder Analysen an Back-End-Dienste
- Regelmäßige Synchronisierung von Anwendungsdaten mit einem Server
WorkManager ist nicht für laufende Hintergrundarbeiten gedacht, die bei Beendigung des Anwendungsprozesses sicher beendet werden können. Es ist auch keine allgemeine Lösung für alle Arbeiten, die sofort ausgeführt werden müssen. In der Anleitung zur Hintergrundverarbeitung erfahren Sie, welche Lösung Ihren Anforderungen entspricht.
Beziehung zu anderen APIs
Koroutinen sind die empfohlene Lösung für bestimmte Anwendungsfälle, sie sollten jedoch nicht für dauerhafte Arbeiten verwendet werden. Dabei ist zu beachten, dass Koroutinen ein Gleichzeitigkeits-Framework sind, während WorkManager eine Bibliothek für persistente Arbeit ist. Daher solltest du den AlarmManager nur für Uhren oder Kalender verwenden.
API | Empfohlen für | Beziehung zu WorkManager |
---|---|---|
Koroutinen | Jede asynchrone Arbeit, die nicht dauerhaft sein muss. | Koroutinen sind die Standardmethode zum Verlassen des Hauptthreads in Kotlin. Sobald die App geschlossen ist, hinterlassen sie jedoch Erinnerungen. Verwenden Sie für dauerhafte Arbeit WorkManager. |
AlarmManager | Nur Wecker. | Anders als beim WorkManager wird der Stromsparmodus eines Geräts durch AlarmManager aktiviert. Es ist daher in Bezug auf Energie- und Ressourcenmanagement nicht effizient. Verwende sie nur für präzise Alarme oder Benachrichtigungen wie Kalendertermine, nicht für Hintergrundarbeiten. |
Verworfene APIs ersetzen
Die WorkManager API ist der empfohlene Ersatz für alle früheren Android-APIs zur Planung im Hintergrund, einschließlich FirebaseJobDispatcher
, GcmNetworkManager
und JobScheduler
.
Erste Schritte
Informationen zur Verwendung von WorkManager in Ihrer App finden Sie im Startleitfaden.
Weitere Informationen
In den folgenden Abschnitten finden Sie einige zusätzliche Ressourcen.
Videos
- Videoreihe Workmanager – MAD Skills
- Working with WorkManager vom Android Dev Summit 2018
- WorkManager: Beyond the Fundamentals, vom Android Dev Summit 2019