Erste Schritte mit WorkManager

Um den WorkManager zu nutzen, musst du zuerst die Bibliothek in dein Android-Gerät importieren Projekt arbeiten.

Fügen Sie der Datei build.gradle Ihrer Anwendung 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, definieren Sie die auszuführende Arbeit.

Aufgaben definieren

Die Arbeit wird mithilfe der Worker definiert . Die Methode doWork() wird asynchron im Hintergrund ausgeführt Thread bereitgestellt von WorkManager.

Damit WorkManager ausgeführt werden kann, erweitern Sie die Worker-Klasse und überschreiben Sie die doWork()-Methode. Um beispielsweise einen Worker zu erstellen, der Bilder verwenden, können Sie Folgendes tun:

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();
   }
}

Das Result von doWork() zurückgegeben, wird der WorkManager-Dienst darüber informiert, erfolgreich war und im Falle eines Scheiterns, ob die Arbeit den Vorgang wiederholen.

  • Result.success(): Die Arbeit wurde abgeschlossen.
  • Result.failure(): Die Arbeit ist fehlgeschlagen.
  • Result.retry(): Die Arbeit ist fehlgeschlagen. Versuchen Sie es später noch einmal. laut seinen Richtlinie für Wiederholungsversuche.

WorkRequest erstellen

Sobald Ihre Arbeit definiert ist, muss sie mit dem WorkManager-Dienst in ausgeführt werden soll. WorkManager bietet eine Menge Flexibilität bei der Planung arbeiten. Sie können die Ausführung planen, regelmäßig in einem Intervall oder Sie planen, nur eine Ausführung Zeit.

Unabhängig davon, wie Sie die Arbeit planen, verwenden Sie immer ein WorkRequest Während ein Worker definiert die Arbeitseinheit, eine WorkRequest (und seine abgeleiteten Klassen), definieren, wie und wann sie ausgeführt werden soll. Im einfachsten Fall können Sie eine OneTimeWorkRequest, wie im folgenden Beispiel gezeigt.

Kotlin

val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilderU<ploadWorker(>)
       .build()

Java

WorkRequest uploadWorkRequest =
   new OneTimeWorkRequest.Builder(UploadWorker.class)
       .build();

WorkRequest an das System senden

Senden Sie zum Schluss Ihre WorkRequest an WorkManager mithilfe des enqueue() .

Kotlin

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest);

Die genaue Zeit, zu der der Worker ausgeführt wird, hängt vom Einschränkungen, die in WorkRequest und bei Systemoptimierungen verwendet werden. WorkManager ist darauf ausgelegt, unter diesen Einschränkungen das beste Verhalten zu erzielen.

Nächste Schritte

Dieser Startleitfaden kratzt nur an der Oberfläche. WorkRequest kann auch zusätzliche Informationen enthalten, wie z. B. die Einschränkungen, unter denen die Work ausgeführt werden soll, Eingabe in die Arbeit, eine Verzögerung und Backoff-Richtlinien für Neuversuche arbeiten. Im nächsten Abschnitt: Arbeit definieren erhalten Sie eine Anleitung, mehr über diese Optionen erfahren und wie Sie einmalige und wiederkehrende Arbeiten planen.

Weitere Informationen

Zusätzlich zur Dokumentation gibt es verschiedene Blogs, Codelabs und Code, Beispiele für den Einstieg.

Produktproben

  • WorkManagerSample eine einfache Bildverarbeitungs-App.
  • Sonnenblume Eine Demo-App, die Best Practices mit verschiedenen Architekturen zeigt einschließlich WorkManager.

Codelabs

Blogs