Erste Schritte mit WorkManager

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

Blogs