Erste Schritte mit WorkManager

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.0"

    // (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.0"

    // (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

Blogs