Bắt đầu sử dụng WorkManager

Để bắt đầu sử dụng WorkManager, trước hết, hãy đưa thư viện vào dự án Android của bạn.

Thêm các phần phụ thuộc sau vào tệp build.gradle của ứng dụng:

Groovy

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")
}

Sau khi bạn đã thêm các phần phụ thuộc và đồng bộ hoá dự án Gradle của mình, bước tiếp theo là xác định một số tệp để vận hành.

Xác định công việc

Công việc được xác định bởi lớp Worker. Phương thức doWork() chạy không đồng bộ trên luồng nền (background thread) do WorkManager cung cấp.

Để tạo một số công việc cho WorkManager vận hành, hãy mở rộng lớp Worker và ghi đè lên phương thức doWork(). Chẳng hạn, để tạo Worker tải hình ảnh lên, bạn có thể làm như sau:

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

Result được trả lại từ doWork() sẽ thông báo cho dịch vụ WorkManager biết công việc có thành công hay không, và trong trường hợp không thành công, liệu có nên thử lại công việc hay không.

  • Result.success(): Công việc hoàn tất thành công.
  • Result.failure(): Công việc không thành công.
  • Result.retry(): Công việc không thành công và nên được thử lại vào lúc khác dựa theo chính sách thử lại của công việc.

Tạo một WorkRequest

Sau khi xác định được công việc, bạn phải lên lịch bằng dịch vụ WorkManager để vận hành công việc. WorkManager mang lại cho bạn sự linh hoạt trong việc lên lịch công việc. Bạn có thể lên lịch để WorkManager vận hành định kỳ trong một khoảng thời gian hoặc một lần duy nhất.

Tuy nhiên, khi chọn lên lịch công việc, bạn sẽ luôn sử dụng một WorkRequest. Mặc dù Worker xác định đơn vị công việc, nhưng WorkRequest (và các lớp con) sẽ xác định cách thức và thời điểm vận hành. Trong trường hợp đơn giản nhất, bạn có thể sử dụng OneTimeWorkRequest như trong ví dụ sau.

Kotlin

val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilder<UploadWorker>()
       .build()

Java

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

Gửi WorkRequest đến hệ thống

Cuối cùng, bạn cần gửi WorkRequest cho WorkManager bằng phương thức enqueue().

Kotlin

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java

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

Thời điểm chính xác mà Worker được thực thi phụ thuộc vào các hạn chế được sử dụng trong WorkRequest của bạn, đồng thời phụ thuộc vào các hoạt động tối ưu hóa của hệ thống. WorkManager được thiết kế để mang lại hành vi tốt nhất dưới các hạn chế này.

Các bước tiếp theo

Hướng dẫn bắt đầu sử dụng này mới chỉ đem lại những kiến thức cơ bản. WorkRequest cũng có thể bao gồm các thông tin bổ sung, chẳng hạn như các hạn chế của công việc khi vận hành, dữ liệu đầu vào cho công việc, độ trễ và chính sách dự phòng để thử lại công việc. Trong phần tiếp theo, Xác định các yêu cầu công việc, bạn sẽ tìm hiểu một cách chi tiết hơn về các lựa chọn này cũng như nắm rõ cách lên lịch cho công việc duy nhất và lặp lại.

Tài nguyên khác

Bên cạnh tài liệu hướng dẫn, bạn cũng có thể tìm hiểu một số blog, lớp học lập trình và mã mẫu để giúp bạn bắt đầu.

Mẫu

  • Sunflower, một ứng dụng minh hoạ giới thiệu những phương pháp tốt nhất với các thành phần cấu trúc, kể cả WorkManager.

Lớp học lập trình

Blog