Wenn Sie WorkManager verwenden möchten, importieren Sie zuerst die Bibliothek in Ihr Android-Projekt.
Fügen Sie der Datei build.gradle
Ihrer App die folgenden Abhängigkeiten hinzu:
Cool
dependencies { def work_version = "2.9.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Nachdem Sie die Abhängigkeiten hinzugefügt und Ihr Gradle-Projekt synchronisiert haben, müssen Sie als Nächstes die auszuführenden Aufgaben definieren.
Arbeit definieren
„Arbeit“ wird mit der Klasse Worker
definiert. Die Methode doWork()
wird asynchron in einem von WorkManager bereitgestellten Hintergrund-Thread ausgeführt.
Wenn Sie eine Aufgabe für WorkManager erstellen möchten, erweitern Sie die Klasse Worker
und überschreiben Sie die Methode doWork()
. So erstellen Sie beispielsweise eine Worker
, die Bilder hochlädt:
Kotlin
class UploadWorker(appContext: Context, workerParams: WorkerParameters): Worker(appContext, workerParams) { override fun doWork(): Result { // Do the work here--in this case, upload the images. uploadImages() // Indicate whether the work finished successfully with the Result return Result.success() } }
Java
public class UploadWorker extends Worker { public UploadWorker( @NonNull Context context, @NonNull WorkerParameters params) { super(context, params); } @Override public Result doWork() { // Do the work here--in this case, upload the images. uploadImages(); // Indicate whether the work finished successfully with the Result return Result.success(); } }
Der von doWork()
zurückgegebene Wert Result
informiert den WorkManager-Dienst darüber, ob die Arbeit erfolgreich war und ob sie im Falle eines Fehlers noch einmal versucht werden soll.
Result.success()
: Die Arbeit wurde erfolgreich abgeschlossen.Result.failure()
: Die Arbeit ist fehlgeschlagen.Result.retry()
: Die Aufgabe ist fehlgeschlagen und sollte gemäß der Wiederholrichtlinie zu einem anderen Zeitpunkt versucht werden.
WorkRequest erstellen
Nachdem die Arbeit definiert wurde, muss sie über den WorkManager-Dienst geplant werden, damit sie ausgeführt werden kann. WorkManager bietet Ihnen viel Flexibilität bei der Planung Ihrer Arbeit. Sie können festlegen, dass die Funktion regelmäßig über einen bestimmten Zeitraum ausgeführt wird, oder dass sie nur einmal ausgeführt wird.
Unabhängig davon, wie Sie die Arbeit planen, verwenden Sie immer eine WorkRequest
. Während eine Worker
die Arbeitseinheit definiert, legen eine WorkRequest
und ihre Unterklassen fest, wie und wann sie ausgeführt werden soll. Im einfachsten Fall können Sie einen OneTimeWorkRequest
verwenden, wie im folgenden Beispiel gezeigt.
Kotlin
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
Java
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
WorkRequest an das System senden
Anschließend müssen Sie Ihre WorkRequest
mit der Methode enqueue()
an WorkManager
senden.
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Java
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
Wann der Worker genau ausgeführt wird, hängt von den Einschränkungen ab, die in Ihrer WorkRequest
verwendet werden, und von den Systemoptimierungen.
WorkManager wurde entwickelt, um unter diesen Einschränkungen die bestmögliche Leistung zu erzielen.
Nächste Schritte
In diesem Leitfaden für den Einstieg werden nur die Grundlagen behandelt. Die WorkRequest
kann auch zusätzliche Informationen enthalten, z. B. die Einschränkungen, unter denen die Arbeit ausgeführt werden soll, Eingaben für die Arbeit, eine Verzögerung und eine Backoff-Richtlinie für den erneuten Versuch der Arbeit. Im nächsten Abschnitt Aufgabenanfragen definieren erfahren Sie mehr über diese Optionen und darüber, wie Sie einmalige und wiederkehrende Aufgaben planen.
Weitere Informationen
Neben der Anleitung gibt es mehrere Blogs, Codelabs und Codebeispiele, die Ihnen den Einstieg erleichtern.
Produktproben
- Sunflower, eine Demo-App, die Best Practices für verschiedene Architekturkomponenten wie WorkManager zeigt
Codelabs
- WorkManager verwenden (Kotlin) und (Java)
- Erweiterter WorkManager (Kotlin)
Blogs
- WorkManager
- WorkManager-Grundlagen
- WorkManager und Kotlin
- WorkManager-Periodizität
- WorkManager anpassen – Grundlagen
- WorkManager mit Dagger anpassen