Wenn Sie WorkManager verwenden möchten, müssen Sie die Bibliothek zuerst in Ihr Android-Projekt importieren.
Fügen Sie der Datei build.gradle
Ihrer Anwendung die folgenden Abhängigkeiten hinzu:
Groovig
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, können Sie im nächsten Schritt die auszuführenden Aufgaben definieren.
Die Arbeit definieren
Die Arbeit wird über die Klasse Worker
definiert. Die Methode doWork()
wird asynchron auf einem von WorkManager bereitgestellten Hintergrundthread ausgeführt.
Erweitern Sie die Klasse Worker
und überschreiben Sie die Methode doWork()
, um Aufgaben zur Ausführung von WorkManager zu schaffen. So erstellen Sie beispielsweise ein Worker
, mit dem Bilder hochgeladen werden:
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(); } }
Die von doWork()
zurückgegebene Result
informiert den WorkManager-Dienst darüber, ob die Arbeit erfolgreich war und im Fall eines Fehlers, ob sie wiederholt werden soll.
Result.success()
: Die Arbeit wurde abgeschlossen.Result.failure()
: Die Arbeit ist fehlgeschlagen.Result.retry()
: Die Arbeit ist fehlgeschlagen und sollte gemäß der Wiederholungsrichtlinie zu einem anderen Zeitpunkt versucht werden.
WorkRequest erstellen
Nachdem Sie Ihre Arbeit definiert haben, muss sie mit dem WorkManager-Dienst geplant werden, damit sie ausgeführt werden kann. WorkManager bietet ein hohes Maß an Flexibilität bei der Planung Ihrer Arbeit. Sie können die regelmäßige Ausführung über ein Intervall oder nur einmal planen.
Unabhängig davon, wie Sie die Arbeit planen, verwenden Sie immer eine WorkRequest
. Während eine Worker
die Arbeitseinheit definiert, definieren ein WorkRequest
(und ihre untergeordneten Klassen) wie und wann sie ausgeführt werden soll. Im einfachsten Fall können Sie ein 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
Abschließend müssen Sie die WorkRequest
mithilfe der Methode enqueue()
an WorkManager
senden.
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Java
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
Die genaue Zeit, zu der der Worker ausgeführt wird, hängt von den Einschränkungen ab, die in Ihrem WorkRequest
verwendet werden, und von Systemoptimierungen.
WorkManager ist so konzipiert, dass Sie unter Berücksichtigung dieser Einschränkungen die bestmögliche Leistung erzielen.
Nächste Schritte
Dieser Startleitfaden kratzt nur an der Oberfläche. Der 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 die Wiederholung von Arbeiten. Im nächsten Abschnitt, Arbeitsanfragen definieren, erfahren Sie mehr über diese Optionen und wie Sie einmalige und wiederkehrende Aufgaben planen.
Weitere Informationen
Zusätzlich zur Anleitungsdokumentation gibt es verschiedene Blogs, Codelabs und Codebeispiele, die Ihnen den Einstieg erleichtern.
Produktproben
- WorkManagerSample, eine einfache Bildverarbeitungsanwendung.
- Sunflower, eine Demo-App, die Best Practices für verschiedene Architekturkomponenten, einschließlich WorkManager, zeigt.
Codelabs
- Mit WorkManager (Kotlin) und (Java) arbeiten
- Advanced WorkManager (Kotlin)
Blogs
- Wir stellen vor: WorkManager
- WorkManager-Grundlagen
- WorkManager und Kotlin
- WorkManager-Regelmäßigkeit
- WorkManager anpassen – Fundamentals
- WorkManager mit Dagger anpassen