Để 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
- Làm việc với WorkManager (Kotlin) và (Java)
- WorkManager (Kotlin) nâng cao
Blog
- Giới thiệu WorkManager
- Thông tin cơ bản về WorkManager
- WorkManager và Kotlin
- Tính chu kỳ của WorkManager
- Tuỳ chỉnh WorkManager – Các nguyên tắc cơ bản
- Tuỳ chỉnh WorkManager bằng Dagger