Lên lịch cho các nhiệm vụ bằng WorkManager  Thuộc Android Jetpack.

WorkManager là giải pháp được đề xuất cho công việc liên tục. Khả năng làm việc liên tục khi được lên lịch thông qua các lần khởi động lại ứng dụng và khởi động lại hệ thống. Vì hầu hết quá trình xử lý nền đều diễn ra hiệu quả nhất thông qua khả năng làm việc liên tục, WorkManager là API chính nên dùng để xử lý nền.

Các loại công việc liên tục

WorkManager xử lý ba loại công việc liên tục:

  • Ngay lập tức: Những tác vụ phải bắt đầu ngay và hoàn thành sớm. Có thể được ưu tiên.
  • Lâu dài: Những tác vụ có thể chạy lâu hơn và có thể kéo dài hơn 10 phút.
  • Có thể trì hoãn: Những tác vụ đã lên lịch bắt đầu sau và có thể chạy định kỳ.

Hình 1 cho thấy mối liên hệ giữa các loại công việc liên tục có liên quan.

Công việc liên tục có thể ngay lập tức, lâu dài hoặc có thể trì hoãn
Hình 1: Các hình thức làm việc liên tục.

Tương tự, bảng sau liệt kê các loại công việc khác.

Loại Tính chu kỳ Cách truy cập
Ngay lập tức Một lần OneTimeWorkRequestWorker.

Đối với công việc ưu tiên, hãy gọi setExpedited() trên OneTimeWorkRequest.

Chạy dài Một lần hoặc định kỳ WorkRequest hoặc Worker bất kỳ. Gọi cho setForeground() trong Worker để xử lý thông báo.
Có thể trì hoãn Một lần hoặc định kỳ PeriodicWorkRequestWorker.

Để biết thêm thông tin về cách thiết lập WorkManager, hãy xem hướng dẫn Xác định WorkRequests.

Tính năng

Ngoài việc cung cấp một API đơn giản và nhất quán hơn, WorkManager có một số lợi ích chính khác:

Các điều kiện ràng buộc của công việc

Xác định rõ ràng các điều kiện tối ưu để chạy quảng cáo bằng cách sử dụng các điều kiện ràng buộc của công việc. Ví dụ: chỉ chạy khi thiết bị đang ở trên mạng không đo lượng dữ liệu, khi thiết bị ở trạng thái rảnh hoặc khi thiết bị có đủ pin.

Tính năng lập lịch biểu mạnh mẽ

WorkManager cho phép bạn lập lịch công việc để chạy một lần hoặc lặp lại bằng cách dùng cửa sổ lập lịch linh hoạt. Bạn cũng có thể gắn thẻ và đặt tên cho công việc, cho phép bạn lên lịch công việc riêng biệt, có thể thay thế cũng như theo dõi hoặc hủy nhóm công việc.

Công việc đã lên lịch sẽ được lưu trữ trong một cơ sở dữ liệu SQLite quản lý nội bộ và WorkManager sẽ đảm bảo rằng công việc này liên tục và được lên lịch lại sau khi khởi động lại thiết bị.

Ngoài ra, WorkManager tuân thủ các tính năng tiết kiệm điện và các phương pháp hay nhất như Chế độ nghỉ, vì vậy, bạn không phải lo lắng về việc này.

Công việc ưu tiên

Bạn có thể dùng WorkManager để lên lịch công việc ngay lập tức để thực thi trong nền. Bạn nên sử dụng Công việc ưu tiên cho những công việc quan trọng với người dùng và hoàn thành trong vòng vài phút.

Chính sách thử lại linh hoạt

Đôi khi công việc không thành công. WorkManager cung cấp các chính sách thử lại linh hoạt, trong đó có chính sách về thời gian đợi luỹ thừa có thể định cấu hình.

Chuỗi công việc

Đối với công việc phức tạp có liên quan, hãy tạo chuỗi các công việc riêng lẻ lại với nhau bằng giao diện trực quan cho phép bạn kiểm soát phần nào chạy tuần tự và phần nào chạy song song.

Kotlin


val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

Java


WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

Đối với mỗi công việc, bạn có thể xác định dữ liệu đầu vào và đầu ra cho công việc đó. Khi tạo chuỗi công việc cùng nhau, WorkManager sẽ tự động chuyển dữ liệu đầu ra từ một công việc sang công việc tiếp theo.

Khả năng tương tác tạo luồng tích hợp sẵn

WorkManager tích hợp liền mạch với CoroutinesRxJava, đồng thời giúp bạn cấp quyền truy cập vào các API không đồng bộ của riêng bạn một cách linh hoạt.

Sử dụng WorkManager cho công việc đáng tin cậy

WorkManager dành cho công việc bắt buộc phải chạy một cách đáng tin cậy ngay cả khi người dùng rời khỏi màn hình, ứng dụng thoát hoặc thiết bị khởi động lại. Ví dụ:

  • Gửi nhật ký hoặc số liệu phân tích đến các dịch vụ phụ trợ.
  • Định kỳ đồng bộ hóa dữ liệu ứng dụng với máy chủ.

WorkManager không dành cho công việc trong nền đang được xử lý và có thể được chấm dứt một cách an toàn nếu quy trình ứng dụng biến mất. Đây cũng không phải là giải pháp chung cho tất cả công việc đòi hỏi phải thực thi ngay. Vui lòng xem lại hướng dẫn xử lý nền để xem giải pháp nào đáp ứng nhu cầu của bạn.

Mối quan hệ với các API khác

Mặc dù coroutine là giải pháp được đề xuất cho một số trường hợp sử dụng nhất định, nhưng bạn không nên dùng coroutine để làm việc liên tục. Điều quan trọng cần lưu ý là coroutine là một khung đồng thời, trong khi WorkManager là một thư viện để làm việc liên tục. Tương tự như vậy, bạn chỉ nên sử dụng AlarmManager cho đồng hồ hoặc lịch.

API Được đề xuất cho Mối quan hệ với WorkManager
Coroutine Tất cả công việc không đồng bộ không cần phải liên tục. Coroutine là phương tiện tiêu chuẩn để rời khỏi luồng chính trong Kotlin. Tuy nhiên, các phương tiện này sẽ lưu lại bộ nhớ sau khi ứng dụng đóng. Để làm việc liên tục, hãy sử dụng WorkManager.
AlarmManager Chỉ chuông báo Không giống như WorkManager, AlarmManager đánh thức một thiết bị từ chế độ Nghỉ. Do đó, giải pháp này không hiệu quả về mặt quản lý điện và tài nguyên. Bạn chỉ nên dùng tính năng này cho các chuông báo hoặc thông báo chính xác, chẳng hạn như sự kiện trên lịch, chứ không phải công việc trong nền.

Thay thế các API không dùng nữa

API WorkManager là API thay thế đề xuất cho tất cả API lập lịch nền Android trước đây, bao gồm FirebaseJobDispatcher, GcmNetworkManagerJob Scheduler ,

Bắt đầu

Xem Hướng dẫn bắt đầu sử dụng để bắt đầu sử dụng WorkManager trong ứng dụng.

Tài nguyên khác

Để biết thêm thông tin về WorkManager, hãy tham khảo các tài nguyên sau.

Mẫu

Video

Blog