WorkManager

WorkManager API giúp bạn dễ dàng lên lịch các tác vụ không thể trì hoãn, không đồng bộ và phải được chạy một cách đáng tin cậy. Các API này cho phép bạn tạo một tác vụ và giao cho WorkManager để chạy khi các quy tắc ràng buộc của công việc được đáp ứng.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 8 tháng 2 năm 2023 2.8.0 - - -

Khai báo phần phụ thuộc

Để thêm một phần phụ thuộc trên WorkManager, bạn phải thêm kho lưu trữ Google Maven vào dự án:

Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle cho ứng dụng hoặc mô-đun của mình:

Groovy

dependencies {
    def work_version = "2.8.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.8.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"
}

Để biết thông tin về cách sử dụng các phần mở rộng Kotlin, hãy xem tài liệu ktx.

Để biết thêm thông tin về các phần phụ thuộc, hãy xem nội dung Thêm phần phụ thuộc cho bản dựng.

Ý kiến phản hồi

Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.

Phiên bản 2.8

Phiên bản 2.8.0

Ngày 8 tháng 2 năm 2023

Phát hành androidx.work:work-*:2.8.0. Phiên bản 2.8.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.7.0

Tính năng mới

Các thay đổi về API

  • Đã thêm WorkManager.updateWork để cập nhật công việc duy trì thời gian xếp hàng đợi và chuỗi của hàng đợi ban đầu. (I9a248, b/219446409)
  • Thêm ExistingPeriodicWorkPolicy.UPDATE. Chính sách này cho phép cập nhật một công việc định kỳ theo tên. Chính sách này tương tự như REPLACE hiện có, nhưng ít xâm phạm hơn: nghĩa là không huỷ nếu trình thực thi đang chạy, đồng thời vẫn giữ nguyên thời gian chờ trong hàng đợi – độ trễ và khoảng thời gian ban đầu được tính từ thời gian chờ hàng đợi ban đầu, thay vì thời gian cập nhật. Ngừng sử dụng REPLACE để giảm sự nhầm lẫn giữa REPLACEUPDATE vì chúng có tên rất giống nhau. Nếu vẫn muốn giữ lại ngữ nghĩa trước đó của REPLACE, bạn có thể sử dụng CANCEL_AND_REENQUEUE mới được thêm vào, giống hệt với REPLACE. (I985ed, b/219446409)
  • Thêm tính năng chặn các trường hợp ngoại lệ về lập lịch, cung cấp Consumer<Throwable> thông qua setSchedulingExceptionHandler)
  • Thêm tính năng cung cấp Consumer<Throwable> thông qua setInitializationExceptionHandler để xác định xem có vấn đề nào khi cố gắng khởi chạy WorkManager hay không.
  • Trình trợ giúp cùng dòng cho OneTimeWorkRequestPeriodicWorkRequest đã được di chuyển từ androidx.work:work-runtime-ktx sang androidx.work:work-runtime (I0010f, b/209145335)
  • Thêm các phương thức trợ giúp WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags để tạo WorkQuery trực tiếp. (b/199919736) (If48f2, b/199919736)
  • Thêm getForegroundInfo vào Worker. (Ic1ead)
  • RxWorker cho cả RxJava 2 và RxJava 3 hiện đều có setForeground trả về Completable có thể dùng thay cho setForegroundInfoAsync trả về ListenableFuture
  • RxWorker cho cả RxJava 2 và RxJava 3 đều có getForegroundInfo trả về Single có thể dùng thay cho getForegroundInfoAsync trả về ListenableFuture. (b/203851459)
  • Hiện có thể thiết lập các quy tắc ràng buộc trực tiếp thay vì sử dụng Constraints.Builder để thuận tiện cho người dùng Kotlin. (Idc390, b/137568653)
  • Thêm chức năng kiểm tra xem WorkManager đã được khởi tạo chưa. Ngoài ra, thêm API getConfiguration() mới dành cho nhà phát triển thư viện để lấy cấu hình mà WorkManager được khởi chạy. (I6eff3, b/212300336)

Sửa lỗi

  • Sửa lỗi với trình lập lịch biểu hoạt động tối ưu để khiến các trình thực thi không chạy ngay lập tức khi đang tải. (I9686b, b/248111307)
  • Thêm @RequiresPermission vào các API yêu cầu cấp quyền POST_NOTIFICATIONS trên SDK 33 trở lên. (Ie542e, b/238790278)
  • Truyền các phương thức huỷ bỏ trong CoroutineScope đến ListenableFuture khi sử dụng suspendCancellableCoroutine.

Phiên bản 2.8.0-rc01

Ngày 7 tháng 12 năm 2022

Phát hành androidx.work:work-*:2.8.0-rc01. Phiên bản 2.8.0-rc01 bao gồm các thay đổi sau.

Tính năng mới

  • Không có tính năng mới nào trong bản phát hành này. Đây chủ yếu là phiên bản bump

Phiên bản 2.8.0-beta02

Ngày 9 tháng 11 năm 2022

Phát hành androidx.work:work-*:2.8.0-beta02. Phiên bản 2.8.0-beta02 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa phương thức equals trong WorkInfo, trước đây không tính đến thông tin về thế hệ mới. (4977cc)

Phiên bản 2.8.0-beta01

Ngày 5 tháng 10 năm 2022

Phát hành androidx.work:work-*:2.8.0-beta01. Phiên bản 2.8.0-beta01 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi với trình lập lịch biểu hoạt động tối ưu để khiến các trình thực thi không chạy ngay lập tức khi đang tải. (I9686b, b/248111307)

Phiên bản 2.8.0-alpha04

Ngày 7 tháng 9 năm 2022

Phát hành androidx.work:work-*:2.8.0-alpha04. Phiên bản 2.8.0-alpha04 bao gồm các thay đổi sau.

Các thay đổi về API

  • Thêm WorkerInfo.getGeneration()WorkerParameters.getGeneration() để trả về hoạt động tạo một trình thực thi. Một trình thực thi có nhiều thế hệ (nhiều lần được tạo) nếu được cập nhật qua WorkManager.updateWork hoặc WorkManager.enqueueUniquePeriodicWork bằng ExistingPeriodicWorkPolicy.UPDATE. Lưu ý là nếu trình thực thi đang chạy, thì có thể phương thức này sẽ trả về một thế hệ mới hơn thế hệ trình thực thi đang chạy nếu cập nhật trong quá trình thực thi của trình thực thi đó. (I665c5, b/219446409) (I128a9, b/219446409)
  • Thêm InitializationExceptionHandler – một Trình xử lý ngoại lệ dùng để xác định xem có vấn đề nào khi cố khởi chạy WorkManager hay không. (I061de)

Phiên bản 2.8.0-alpha03

Ngày 10 tháng 8 năm 2022

Phát hành androidx.work:work-*:2.8.0-alpha03. Phiên bản 2.8.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Chúng tôi đã thêm khả năng cập nhật WorkRequests theo cách không xâm nhập, giúp duy trì thời gian của hàng đợi ban đầu, tạo chuỗi, v.v. Vui lòng xem WorkManager.updateWorkExistingPeriodicWorkPolicy.UPDATE để biết thêm thông tin chi tiết.

Các thay đổi về API

  • Đã thêm WorkManager.updateWork để cập nhật công việc duy trì thời gian xếp hàng đợi và chuỗi của hàng đợi ban đầu. (I9a248, b/219446409)
  • Thêm ExistingPeriodicWorkPolicy.UPDATE. Chính sách này cho phép cập nhật một công việc định kỳ theo tên. Chính sách này tương tự như REPLACE hiện có, nhưng ít xâm phạm hơn: nghĩa là không huỷ nếu trình thực thi đang chạy, đồng thời vẫn giữ nguyên thời gian chờ trong hàng đợi – độ trễ và khoảng thời gian ban đầu được tính từ thời gian chờ hàng đợi ban đầu, thay vì thời gian cập nhật. Ngừng sử dụng REPLACE để giảm sự nhầm lẫn giữa REPLACEUPDATE vì chúng có tên rất giống nhau. Nếu vẫn muốn giữ lại ngữ nghĩa trước đó của REPLACE, bạn có thể sử dụng CANCEL_AND_REENQUEUE mới được thêm vào, giống hệt với REPLACE. (I985ed, b/219446409)
  • Thêm khả năng chặn các trường hợp ngoại lệ về lập lịch bằng cách xác định SchedulingExceptionHandler. (I033eb)
  • Trình trợ giúp cùng dòng cho OneTimeWorkRequestPeriodicWorkRequest đã được di chuyển từ androidx.work:work-runtime-ktx sang androidx.work:work-runtime (I0010f, b/209145335)

Sửa lỗi

  • Thêm @RequiresPermission vào các API yêu cầu cấp quyền POST_NOTIFICATIONS trên SDK 33 trở lên. (Ie542e, b/238790278)

Phiên bản 2.8.0-alpha02

Ngày 6 tháng 4 năm 2022

androidx.work:work-*:2.8.0-alpha02 đã phát hành. Phiên bản 2.8.0-alpha02 bao gồm các thay đổi sau.

Các thay đổi về API

  • Bạn hiện có thể thiết lập các quy tắc ràng buộc trực tiếp thay vì sử dụng Trình tạo (Builder) để thuận tiện cho người dùng Kotlin. (Idc390, b/137568653)
  • Thêm chức năng kiểm tra xem WorkManager đã được khởi tạo chưa. Ngoài ra, thêm API getConfiguration() mới dành cho nhà phát triển thư viện để lấy cấu hình mà WorkManager được khởi chạy. (I6eff3, b/212300336)

Phiên bản 2.8.0-alpha01

Ngày 12 tháng 1 năm 2022

Phát hành androidx.work:work-*:2.8.0-alpha01. Phiên bản 2.8.0-alpha01 bao gồm các thay đổi sau.

Các thay đổi về API

  • Thêm các phương thức trợ giúp WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames, WorkQuery.fromTags để tạo WorkQuery trực tiếp. (If48f2, b/199919736)
  • Thêm các phương thức BuildCompat thử nghiệm cho các SDK trong tương lai (Iafd82, b/207528937)
  • Thêm getForegroundInfo vào Worker. (Ic1ead)
  • Thêm các phương thức trợ giúp WorkQuery.fromIds để tạo WorkQuery trực tiếp từ các giá trị nhận dạng. (Ie5bdf, b/199919736)
  • RxWorker hiện có setForeground (trả về Completable) có thể được sử dụng thay vì setForegroundInfoAsync (trả về ListenableFuture). (I85156)
  • RxWorker dành cho RxJava 2 nay có getForegroundInfo trả về Single có thể được sử dụng thay vì getForegroundInfoAsync (trả về ListenableFuture). (I21c91, b/203851459)
  • RxWorker dành cho RxJava 3 nay có getForegroundInfo trả về Single có thể được sử dụng thay vì getForegroundInfoAsync (trả về ListenableFuture). (I1ca8a)
  • RxWorker hiện có setForeground (trả về Completable) có thể được sử dụng thay vì setForegroundInfoAsync (trả về ListenableFuture). (I992a3, b/203851459)

Sửa lỗi

  • Truyền các phương thức huỷ bỏ trong CoroutineScope đến ListenableFuture khi sử dụng suspendCancellableCoroutine. (I77e63)

Phiên bản 2.7

Phiên bản 2.7.1

Ngày 17 tháng 11 năm 2021

Phát hànhandroidx.work:work-*:2.7.1. Phiên bản 2.7.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Các phương thức huỷ bỏ trong CoroutineScope được truyền đến ListenableFuture khi sử dụng suspendCancellableCoroutine. (I77e63)
  • Một ngoại lệ được gửi ngay lập tức khi các yêu cầu công việc bị trì hoãn được đánh dấu là ưu tiên. bef1762

Phiên bản 2.7.0

Ngày 13 tháng 10 năm 2021

Phát hành androidx.work:work-*:2.7.0. Phiên bản 2.7.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.6.0

  • WorkManager ra mắt một API WorkRequest.Builder.setExpedited(...) mới để giúp giải quyết hạn chế về Dịch vụ tiền cảnh trong Android 12.

  • Khi sử dụng setExpedited(...), WorkManager được uỷ quyền đối với các công việc ưu tiên trong JobScheduler bắt đầu từ Android 12, đồng thời vẫn cung cấp khả năng tương thích ngược trên các phiên bản Android trước bằng cách uỷ quyền cho một Dịch vụ trên nền trước.

Phiên bản 2.7.0-rc01

Ngày 29 tháng 9 năm 2021

Phát hành androidx.work:work-*:2.7.0-rc01. Phiên bản 2.7.0-rc01 bao gồm các thay đổi sau.

Phiên bản này hoàn toàn giống với phiên bản androidx.work:work-*:2.7.0-beta01.

Phiên bản 2.7.0-beta01

Ngày 1 tháng 9 năm 2021

Phát hành androidx.work:work-*:2.7.0-beta01. Phiên bản 2.7.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • Giảm sự tranh chấp SQLite đa quá trình khi khởi chạy WorkManager.

Các thay đổi về API

  • Xoá các API @ExperimentalExpeditedWork vì các API nền tảng cơ bản dành cho Android 12 (S) đều ổn định. (aosp/1792806)

Sửa lỗi

  • Cung cấp một thông báo lỗi tốt hơn khi những trình thực thi (worker) ưu tiên không triển khai getForegroundInfoAsync(). (aosp/1809376)

Phiên bản 2.7.0-alpha05

Ngày 21 tháng 7 năm 2021

Phát hành androidx.work:work-*:2.7.0-alpha05. Phiên bản 2.7.0-alpha05 bao gồm các thay đổi sau.

Bản phát hành này cũng chứa các phần sửa lỗi trong bản phát hành WorkManager 2.6.0-beta02.

Phiên bản 2.7.0-alpha04

Ngày 2 tháng 6 năm 2021

Phát hành androidx.work:work-*:2.7.0-alpha04.

Bản phát hành này cũng chứa các thay đổi từ bản phát hành 2.6.0-beta01.

Các thay đổi về API

Sửa lỗi

  • Khi những công việc ưu tiên đã được lên lịch lại, những công việc này sẽ không còn được ưu tiên nữa. Những công việc này trở thành những công việc thông thường.

Phiên bản 2.7.0-alpha03

Ngày 21 tháng 4 năm 2021

Phát hành androidx.work:work-*:2.7.0-alpha03. Phiên bản 2.7.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Từ WorkManager 2.6.0-alpha02: Thêm tính năng hỗ trợ cho các Trình thực thi (Worker) để có thể chạy trong bất kỳ quá trình nào. (Iaf200)

  • Từ WorkManager 2.6.0-alpha02: Thêm một RemoteCoroutineWorker. Đây là phương thức triển khai của RemoteListenableWorker có thể liên kết với một quá trình từ xa. (I30578)

Các thay đổi về API

  • Từ WorkManager 2.6.0-alpha02: Thêm tính năng hỗ trợ cho quy tắc hạn chế mạng của TEMPORARILY_UNMETERED. (I08d5e)
  • Từ WorkManager 2.6.0-alpha02: Hỗ trợ trình thực thi đa quá trình dành cho setProgressAsync(). (Ib6d08)
  • Từ WorkManager 2.6.0-alpha02: Chuyển WorkManagerInitializer trở thành công khai để các androidx.startup.Initializer khác có thể sử dụng các chế độ cài đặt này làm phần phụ thuộc. (I5ab11)

Phiên bản 2.7.0-alpha02

Ngày 10 tháng 3 năm 2021

Phát hành androidx.work:work-*:2.7.0-alpha02. Phiên bản 2.7.0-alpha02 bao gồm các thay đổi sau.

Sửa lỗi

  • Làm cho PendingIntent có thể thay đổi một cách rõ ràng để khắc phục sự cố khi nhắm mục tiêu Android 12. (b/180884673)

Phiên bản 2.7.0-alpha01

Ngày 18 tháng 2 năm 2021

Phát hành androidx.work:work-*:2.7.0-alpha01. Phiên bản 2.7.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • WorkManager ra mắt một API WorkRequest.Builder.setExpedited(...) mới để giúp giải quyết hạn chế về dịch vụ tiền cảnh trong Android 12.

    Các ứng dụng không thể chạy dịch vụ trên nền trước khi đang chạy trong nền nữa. Do đó, để hỗ trợ tốt hơn cho công việc lâu dài mà trước đây liên quan đến vòng đời của dịch vụ trên nền trước, các ứng dụng có thể đánh dấu các WorkRequestưu tiên.

    API này thay thế cho các API setForegroundAsync(...)/setForeground(...) nay không dùng nữa.

    Khi sử dụng setExpedited(...), WorkManager được uỷ quyền đối với các công việc ưu tiên trong JobScheduler bắt đầu từ Android 12, đồng thời vẫn cung cấp khả năng tương thích ngược trên các phiên bản Android trước bằng cách uỷ quyền cho các dịch vụ trên nền trước,

Các thay đổi về API

  • Thêm tính năng hỗ trợ cho các WorkRequest ưu tiên.

Phiên bản 2.6.0

Phiên bản 2.6.0

Ngày 1 tháng 9 năm 2021

Phát hành androidx.work:work-*:2.6.0. Phiên bản 2.6.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.5.0

  • WorkManager hiện sử dụng androidx.startup để khởi chạy WorkManager. Nếu từng sử dụng tools:node="remove" trên ContentProvider đang dùng để khởi chạy WorkManager trước đây, thì bạn cần thao tác như sau.

    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    
    <!-- If you want to disable android.startup completely. -->
     <provider
                android:name="androidx.startup.InitializationProvider"
                android:authorities="${applicationId}.androidx-startup"
                tools:node="remove" />
    
  • Thêm tính năng hỗ trợ cho các Trình thực thi (Worker) để có thể chạy trong bất kỳ quá trình nào. (Iaf200)

  • Thêm một RemoteCoroutineWorker. Đây là phương thức triển khai RemoteListenableWorker có thể liên kết với một quá trình từ xa. (I30578)

Phiên bản 2.6.0-rc01

Ngày 4 tháng 8 năm 2021

Phát hành androidx.work:work-*:2.6.0-rc01. Phiên bản 2.6.0-rc01 bao gồm các thay đổi sau.

Phiên bản này hoàn toàn giống với phiên bản androidx.work:work-*:2.6.0-beta02.

Phiên bản 2.6.0-beta02

Ngày 21 tháng 7 năm 2021

Phát hành androidx.work:work-*:2.6.0-beta02. Phiên bản 2.6.0-beta02 bao gồm các thay đổi sau.

Sửa lỗi

  • RemoteWorkManager nay huỷ liên kết đúng cách với RemoteWorkManagerService, cho phép RemoteWorkManagerService dọn dẹp tài nguyên đúng cách. aosp/1730694
  • RemoteListenableWorker nay huỷ liên kết đúng cách với RemoteWorkerService, cho phép RemoteWorkerService dọn dẹp tài nguyên đúng cách. aosp/1743817
  • ForceStopRunnable hiện chỉ chạy trong tiến trình ứng dụng chính. Đây là quá trình tối ưu hoá và tránh tranh chấp tài nguyên cho các ứng dụng sử dụng nhiều quá trình. aosp/1749180, aosp/1761729

Phiên bản 2.6.0-beta01

Ngày 2 tháng 6 năm 2021

Phát hành androidx.work:work-*:2.6.0-beta01. Phiên bản 2.6.0-beta01 bao gồm các thay đổi sau.

Bản phát hành này có một số cải tiến nhỏ về tài liệu. Bản phát hành này có sự tương đồng lớn với bản phát hành 2.6.0-alpha02.

Phiên bản 2.6.0-alpha02

Ngày 21 tháng 4 năm 2021

Phát hành androidx.work:work-*:2.6.0-alpha02. Phiên bản 2.6.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm tính năng hỗ trợ cho các Trình thực thi (Worker) để có thể chạy trong bất kỳ quá trình nào. (Iaf200)

  • Thêm một RemoteCoroutineWorker, đây là phương thức triển khai RemoteListenableWorker có thể liên kết với một quá trình từ xa. (I30578)

Các thay đổi về API

  • Thêm tính năng hỗ trợ cho quy tắc hạn chế mạng của TEMPORARILY_UNMETERED. (I08d5e)
  • Hỗ trợ trình thực thi đa quá trình dành cho setProgressAsync(). (Ib6d08)
  • Chuyển WorkManagerInitializer sang chế độ công khai để các androidx.startup.Initializer khác có thể sử dụng những phần này làm phần phụ thuộc. (I5ab11)

Phiên bản 2.6.0-alpha01

Ngày 24 tháng 3 năm 2021

Phát hành androidx.work:work-*:2.6.0-alpha01. Phiên bản 2.6.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • WorkManager nay sử dụng androidx.startup để khởi chạy WorkManager. Trước đây, việc này được androidx.work.impl.WorkManagerInitializer thực hiện. (aosp/1608813)

    Nếu từng sử dụng tools:node="remove" trên ContentProvider đang dùng để khởi tạo vòng đời xử lý trước đây, thì bạn cần thao tác như sau.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (hoặc)

     <!-- If you want to disable android.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Các thay đổi về API

  • Thêm một API Result.getOutputData() sẽ trả về outputData của ListenableWorker. (Ie51e3)

Sửa lỗi

  • Thêm phương án giải quyết lỗi OEM khiến SecurityException được gửi khi sử dụng API AlarmManager. (aosp/1587518)

Phiên bản 2.5.0

Phiên bản 2.5.0

Ngày 27 tháng 1 năm 2021

Phát hành androidx.work:work-*:2.5.0. Phiên bản 2.5.0 bao gồm các thay đổi sau.

Những thay đổi lớn kể từ phiên bản 2.4.0

  • Cấu phần phần mềm :work:work-multiprocess mới của các ứng dụng sử dụng nhiều quá trình. Cấu phần phần mềm mới này giúp tăng hiệu suất bằng cách hợp nhất việc lập lịch yêu cầu công việc vào một quá trình.
    • Để sử dụng work-multiprocess, bạn hãy khai báo một phần phụ thuộc trên: implementation "androidx.work:work-multiprocess:2.5.0"
    • Chỉ định một quá trình chính bằng cách sử dụng Configuration.Builder.setDefaultProcessName(String).
    • Khi sử dụng work-multiprocess, bạn cũng cần sử dụng RemoteWorkManager để quản lý các WorkRequest của mình. RemoteWorkManager luôn tiếp cận với quá trình được chỉ định. Trình lập lịch biểu trong quá trình (in-process scheduler) cũng chạy trong quá trình được chỉ định.
  • Đôi khi, ActivityManager không thể tạo bản sao thực thể JobService để bắt đầu một công việc. Điều này khiến công việc cơ bản bị âm thầm bỏ qua vì lỗi nền tảng. WorkManager hiện đảm bảo rằng mỗi WorkRequest chỉ có một công việc sao lưu (backing job) khi một Application đang được khởi chạy bởi các công việc điều chỉnh (reconciling job). Điều này giúp cải thiện đáng kể độ tin cậy khi thực hiện công việc. (b/172475041, aosp/1489577)
  • WorkManager giới hạn sự phát triển của cơ sở dữ liệu bằng cách giảm thời lượng lưu vào bộ đệm để các WorkRequest được theo dõi sau khi một WorkRequest hoàn tất. Trước đó, thời lượng lưu vào bộ đệm là 7 ngày. Thời lượng đã giảm xuống còn1 ngày + thời lượng của keepResultsForAtLeast. (aosp/1419708)
  • TestListenableWorkerBuilder hiện hỗ trợ lớp ListenableWorker được sửa đổi mở rộng để việc kiểm thử trở nên dễ dàng hơn. (aosp/1443299, b/169787349)
  • Bạn hiện có thể sử dụng công cụ kiểm tra WorkManager khi dùng Android Studio Arctic Fox.

Phiên bản 2.5.0-rc01

Ngày 13 tháng 1 năm 2021

Phát hành androidx.work:work-*:2.5.0-rc01. Phiên bản 2.5.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi getWorkInfosLiveData không được vô hiệu hoá đúng cách khỏi các thực thể sau khi các thực thể được cập nhật khi sử dụng API dựa trên WorkQuery. (aosp/1540566, b/173769028)
  • Sửa lỗi các giao dịch cơ sở dữ liệu không được đánh dấu là thành công trong một số ít trường hợp. Lỗi này gây ra nhiều vấn đề trên một số thiết bị Motorola. (aosp/1535368, b/175944460)
  • Sửa lỗi để bỏ qua các NoSuchElementException khi cố huỷ liên kết khỏi quá trình không phản hồi. (aosp/1530589)
  • Cải tiến ConstraintTrackingWorker để chỉ dừng một ListenableWorker nếu trước đó chưa bị ngừng. (aosp/1496844, b/172946965)
  • Cập nhật các thư viện androidx.work để nhắm mục tiêu Java 8 (Ibd2f2)

Phiên bản 2.5.0-beta02

Ngày 2 tháng 12 năm 2020

Phát hành androidx.work:work-*:2.5.0-beta02. Phiên bản 2.5.0-beta02 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi trong androidx.work:work-multiprocess, trong đó WorkManager vô tình chặn luồng (thread) đang gọi khi cố gắng liên kết với quá trình được chỉ định. (aosp/1475538)
  • Khắc phục lỗi PeriodicWorkRequest không được điều chỉnh chính xác. (b/172475041, aosp/1489577)
  • Thêm một phương án khắc phục lỗi nền tảng xảy ra khi dừng dịch vụ trên nền trước trong khi sử dụng các API setForeground*. (b/170924044, aosp/1489901)

Phiên bản 2.5.0-beta01

Ngày 28 tháng 10 năm 2020

Phát hành androidx.work:work-*:2.5.0-beta01. Phiên bản 2.5.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • WorkManager tự động điều tiết số lượng WorkRequest mà trình lập lịch biểu trong quá trình (in-process scheduler) có thể nhận. Các yêu cầu vẫn được thực thi theo thứ tự FIFO. (aosp/1455228)
  • WorkManager cố gắng khôi phục khi kho dữ liệu của ứng dụng ở trạng thái xấu. (aosp/1463103)

Sửa lỗi

  • Khi bị gián đoạn, các ListenableWorker ngay lập tức được đánh dấu là ENQUEUED để có thể lên lịch lại sau đó. (aosp/1455618, b/170273988)

Phiên bản 2.5.0-alpha03

Ngày 14 tháng 10 năm 2020

Phát hành androidx.work:work-*:2.5.0-alpha03. Phiên bản 2.5.0-alpha03 bao gồm các thay đổi sau.

Các thay đổi về API

  • TestListenableWorkerBuilderTestWorkerBuilder không dùng các kiểu thô (raw types). (I883ad, b/169787349)

Sửa lỗi

  • Sử dụng ApplicationInfo để xác định tên của quá trình ứng dụng mặc định. (b/168716641, aosp/1429950)
  • Sửa các quy tắc hiển thị cho RemoteWorkManagerRemoteWorkContinuation. Các API này không còn được đánh dấu là @Restricted nữa. (aosp/1432091)
  • Sửa các quy tắc Proguard cho :work:work-multiprocess. (aosp/1432091)
  • Cải tiến vòng đời thông báo của công việc lâu dài liên quan đến dịch vụ trên nền trước. (b/168502234, aosp/1431331)

Phiên bản 2.5.0-alpha02

Ngày 16 tháng 9 năm 2020

Phát hành androidx.work:work-*:2.5.0-alpha02. Phiên bản 2.5.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm một API vào WorkQuery để có thể sử dụng các id nhằm truy vấn các WorkInfo. (aosp/1412372, b/157335295)
  • WorkManager ra mắt một cấu phần phần mềm mới (androidx.work:work-multiprocess:*) nhằm hỗ trợ tốt hơn cho những ứng dụng sử dụng nhiều quá trình. Cấu phần phần mềm mới này giúp giải quyết một số vấn đề mà các ứng dụng lớn gặp phải, bao gồm:
    • WorkManager thường cần được khởi chạy trong mọi quá trình ứng dụng. Điều này không phải là tốt vì có sự tranh chấp SQLite ngày càng tăng, từ đó gây ra các vấn đề khác. WorkManager hiện có các API mới có thể dùng để chỉ định quá trình ứng dụng chính bằng Configuration#setDefaultProcessName(processName). processName là tên quá trình đủ điều kiện và có dạng packageName:processName (chẳng hạn như com.example:remote).
    • Một tập hợp các API mới: RemoteWorkManagerRemoteWorkContinuation để enqueue, cancelquery các yêu cầu công việc. Các API này không bao gồm LiveData các biến thể để tránh tranh chấp SQLite trên nhiều quá trình. Tất cả lệnh gọi đến enqueue, cancelquery đều được chuyển tiếp đến một quá trình ứng dụng primary bằng AIDL và trả về ListenableFuture thông suốt. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)

Các thay đổi về API

  • WorkManager hiện sẽ lược bớt các WorkRequest đã hoàn thành không có phần phụ thuộc chưa hoàn thiện nào một cách mạnh mẽ hơn. Thay đổi thời lượng vùng đệm từ 7 ngày thành 1 ngày. (aosp/1419708)

Sửa lỗi

  • WorkManager hiện điều chỉnh công việc một cách chủ động để WorkRequestJobScheduler của các công việc được đồng bộ hoá khi WorkManager được khởi chạy. (aosp/1412794, b/166292069)

Phiên bản 2.5.0-alpha01

Ngày 19 tháng 8 năm 2020

Phát hành androidx.work:work-*:2.5.0-alpha01. Phiên bản 2.5.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Các thay đổi đối với các API nội bộ cho phép chúng tôi cung cấp công cụ tốt hơn với WorkManager trong tương lai. Hãy chú ý theo dõi thông tin cập nhật bổ sung.

Sửa lỗi

  • Xử lý các SecurityException khi theo dõi trạng thái mạng trên một số thiết bị. (aosp/1396969)

Đóng góp bên ngoài

Phiên bản 2.4.0

Phiên bản 2.4.0

Ngày 22 tháng 7 năm 2020

Phát hành androidx.work:work-*:2.4.0. Phiên bản 2.4.0 bao gồm các thay đổi sau.

Các thay đổi lớn kể từ phiên bản 2.3.0

  • Trình lập lịch biểu trong quá trình của các WorkManager nay có năng lực tốt hơn. Trước đây, Scheduler trong quá trình sẽ chỉ xem xét thực hiện các công việc không bị trì hoãn và đáp ứng các quy tắc ràng buộc. Hiện tại, trình lập lịch biểu trong quá trình theo dõi các WorkRequest có thể được thực thi trong tương lai, bao gồm cả các PeriodicWorkRequest. Scheduler trong quá trình cũng không tuân thủ các giới hạn về lập lịch (nhưng vẫn bị hạn chế ở kích thước của Executor do WorkManager sử dụng). Điều này có nghĩa là ứng dụng nay có thể thực thi nhiều WorkRequest hơn khi đang ở trong nền trước. Để quản lý việc thực thi công việc bị trì hoãn trong nền trước, WorkManager cũng ra mắt RunnableScheduler có thể định cấu hình mới. (aosp/1185778)
  • WorkManager nay hỗ trợ RxJava 3. Để dùng RxJava 3, bạn nên sử dụng phần phụ thuộc sau: implementation "androidx.work:work-rxjava3:2.4.0". (aosp/1277904)
  • Thêm chức năng truy vấn cho các WorkInfo bằng cách sử dụng một WorkQuery. Điều này hữu ích khi các nhà phát triển muốn truy vấn các WorkInfo bằng cách kết hợp nhiều thuộc tính. Để biết thêm thông tin, hãy xem WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) hoặc WorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546)
  • Thêm khả năng yêu cầu thông tin chẩn đoán từ WorkManager bằng cách sử dụng:

    adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
    

    Điều này cung cấp nhiều thông tin hữu ích bao gồm:

    • Các WorkRequest (yêu cầu công việc) đã được hoàn thành trong 24 giờ qua.
    • Các WorkRequest (yêu cầu công việc) nay đang CHẠY.
    • Các WorkRequest (yêu cầu công việc) đã lên lịch. (aosp/1235501)
  • Thêm ExistingWorkPolicy.APPEND_OR_REPLACE tương tự như APPEND, nhưng thay thế một chuỗi đã huỷ hoặc không đáp ứng được các điều kiện tiên quyết. (b/134613984, aosp/1199640)

  • Cho phép thêm một RunnableScheduler tuỳ chỉnh để theo dõi các WorkRequest cần được thực thi trong tương lai. Thành phần này được sử dụng bởi trình lập lịch biểu trong quá trình. (aosp/1203944)

  • Thêm tính năng hỗ trợ cho việc linh động thêm các nhà máy để uỷ quyền khi sử dụng DelegatingWorkerFactory. (b/156289105, aosp/1309745)

  • Điều chỉnh hoạt động theo dõi các quy tắc ràng buộc của BATTERY_NOT_LOW để gắn bó chặt chẽ với nền tảng hơn. (aosp/1312583)

  • Trình lập lịch biểu trong quá trình hiện sử dụng các API tốt hơn để xác định tên của quá trình. Điều này sẽ hữu ích trong việc hỗ trợ tốt hơn cho những ứng dụng sử dụng nhiều quá trình. (aosp/1324732)

  • Các quy tắc Lint (tìm lỗi mã nguồn) mới thực thi:

    • Sử dụng đúng foregroundServiceType khi sử dụng các API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Chỉ định các giá trị nhận dạng JobScheduler mà WorkManager nên dùng khi sử dụng trực tiếp các API JobService. aosp/1223567
    • Thêm quy tắc Lint (tìm lỗi mã nguồn) mới để đảm bảo rằng các phương thức triển khai ListenableWorker nay là public khi sử dụng WorkerFactory mặc định. (aosp/1291262)
  • Các lệnh gọi đến setForegroundAsync() không hoàn tất trước khi hoàn tất một ListenableWorker sẽ được báo hiệu qua IllegalStateException vào ListenableFuture được trả về. (aosp/1262743)

  • Khắc phục lỗi ForegroundService không bị dừng sau khi một Worker ở nền trước bị gián đoạn. (b/155579898, aosp/1302153)

  • Sửa lỗi WorkManager cố thực thi nhiều thực thể của một Worker liên kết với một Dịch vụ trên nền trước (b/156310133, aosp/1309853)

Phiên bản 2.4.0-rc01

Ngày 24 tháng 6 năm 2020

Phát hành androidx.work:work-*:2.4.0-rc01. Phiên bản 2.4.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Trình lập lịch biểu trong quá trình hiện sử dụng các API tốt hơn để xác định tên của quá trình. Điều này sẽ hữu ích trong việc hỗ trợ tốt hơn cho những ứng dụng sử dụng nhiều quá trình. (aosp/1324732)

Phiên bản 2.4.0-beta01

Ngày 20 tháng 5 năm 2020

Phát hành androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01androidx.work:work-testing:2.4.0-beta01. Phiên bản 2.4.0-beta01 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi ForegroundService không bị dừng sau khi một Worker ở nền trước bị gián đoạn. (b/155579898, aosp/1302153)
  • Sửa lỗi WorkManager cố thực thi nhiều thực thể của một Worker liên kết với một Dịch vụ trên nền trước (b/156310133, aosp/1309853)
  • Thêm tính năng hỗ trợ cho việc linh động thêm các nhà máy để uỷ quyền khi sử dụng DelegatingWorkerFactory. (b/156289105, aosp/1309745)
  • Điều chỉnh hoạt động theo dõi các quy tắc ràng buộc của BATTERY_NOT_LOW để gắn bó chặt chẽ với nền tảng hơn. (aosp/1312583)

Phiên bản 2.4.0-alpha03

Ngày 29 tháng 4 năm 2020

Phát hành androidx.work:work-*:2.4.0-alpha03. Phiên bản 2.4.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • WorkManager nay hỗ trợ RxJava 3. Để dùng RxJava 3, bạn nên sử dụng phần phụ thuộc sau: implementation "androidx.work:work-rxjava3:2.4.0-alpha03". (aosp/1277904)
  • Thêm quy tắc Lint (tìm lỗi mã nguồn) mới để đảm bảo rằng các phương thức triển khai ListenableWorker nay là public khi sử dụng WorkerFactory mặc định. (aosp/1291262)

Các thay đổi về API

  • Hiện tại, việc gọi setProgressAsync() sau khi ListenableWorker đã hoàn tất quá trình thực thi sẽ báo hiệu một Exception thông qua ListenableFuture. (aosp/1285494)
  • WorkQuery.Builder hiện được đánh dấu là final. (aosp/1275037)
  • Các phương thức nhà máy của WorkQuery.BuilderwithStates, withTagswithUniqueWorkNames đã được đổi tên lần lượt thành fromStates, fromTagsfromUniqueWorkNames. (aosp/1280287)

Sửa lỗi

  • Bỏ qua các SecurityException khi theo dõi trạng thái mạng của thiết bị. (b/153246136, aosp/1280813)

Phiên bản 2.4.0-alpha02

Ngày 1 tháng 4 năm 2020

Phát hành androidx.work:work-*:2.4.0-alpha02. Phiên bản 2.4.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm quy tắc Lint (tìm lỗi mã nguồn) mới cảnh báo khi các WorkRequest yêu cầu cả Constraints.setRequiresCharging(...)Constraints.setRequiresDeviceIdle(...). Một số thiết bị không bao giờ chuyển sang trạng thái rảnh (idle) khi sạc. Vì vậy, các yêu cầu như vậy sẽ chạy ít xảy ra thường xuyên hơn dự kiến. (aosp/1253840)

Các thay đổi về API

  • Thêm chức năng truy vấn cho các WorkInfo bằng cách sử dụng một WorkQuery. Điều này hữu ích khi các nhà phát triển muốn truy vấn các WorkInfo bằng cách kết hợp nhiều thuộc tính. Để biết thêm thông tin, hãy xem WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...) hoặc WorkQuery.Builder withUniqueWorkNames(...). (aosp/1253230, b/143847546)

  • Các lệnh gọi đến setForegroundAsync() không hoàn tất trước khi hoàn tất một ListenableWorker sẽ được báo hiệu qua IllegalStateException vào ListenableFuture được trả về. (aosp/1262743)

Sửa lỗi

  • Sửa quy tắc Lint (tìm lỗi mã nguồn) kiểm tra các khoảng thời gian không hợp lệ cho PeriodicWorkRequest. (aosp/1254846, b/152606442)

Phiên bản 2.4.0-alpha01

Ngày 4 tháng 3 năm 2020

Phát hành androidx.work:work-*:2.4.0-alpha01. Phiên bản 2.4.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Trình lập lịch biểu trong quá trình của các WorkManager nay có năng lực tốt hơn. Trước đây, trình lập lịch biểu trong quá trình (in-process Scheduler) sẽ chỉ xem xét thực hiện các công việc không bị trì hoãn và đáp ứng các quy tắc ràng buộc. Hiện tại, trình lập lịch biểu trong quá trình theo dõi các WorkRequest có thể được thực thi trong tương lai, bao gồm cả các PeriodicWorkRequest. Trình lập lịch biểu trong quá trình cũng không tuân thủ các giới hạn về lập lịch (nhưng vẫn bị hạn chế ở kích thước của Executor mà WorkManager đang sử dụng). Điều này có nghĩa là ứng dụng nay có thể thực thi nhiều WorkRequest hơn khi chạy trong nền trước. (aosp/1185778)

  • Thêm chức năng yêu cầu thông tin chẩn đoán từ WorkManager bằng cách sử dụng adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>". Điều này cung cấp nhiều thông tin hữu ích bao gồm:

    • Các WorkRequest (yêu cầu công việc) đã được hoàn thành trong 24 giờ qua.
    • Các WorkRequest (yêu cầu công việc) nay đang CHẠY.
    • Các WorkRequest (yêu cầu công việc) đã lên lịch. (aosp/1235501)
  • Các quy tắc Lint (tìm lỗi mã nguồn) mới thực thi:

    • Sử dụng đúng foregroundServiceType khi sử dụng các API setForegroundAsync(). (b/147873061, aosp/1215915)
    • Chỉ định các giá trị nhận dạng JobSchedulerWorkManager nên dùng khi sử dụng trực tiếp các API JobService. (aosp/1223567)

Các thay đổi về API

  • Thêm ExistingWorkPolicy.APPEND_OR_REPLACE tương tự như APPEND, nhưng thay thế một chuỗi đã huỷ hoặc không đáp ứng được các điều kiện tiên quyết. (b/134613984, aosp/1199640)

  • Cho phép thêm một RunnableScheduler tuỳ chỉnh để theo dõi các WorkRequest cần được thực thi trong tương lai. Thành phần này được sử dụng bởi trình lập lịch biểu trong quá trình. (aosp/1203944)

Sửa lỗi

  • Ngừng sử dụng setProgress() trong RxWorker vì trước đó đã trả về Single<Void> là một kiểu không thể thực thi. Thay vào đó, thêm một API setCompletableProgress() mới trả về Completable; và thêm các quy tắc Lint (tìm lỗi mã nguồn) mới để giúp chuyển sang các API mới. (b/150080946, aosp/1242665)

Phiên bản 2.3.4

Phiên bản 2.3.4

Ngày 18 tháng 3 năm 2020

Phát hành androidx.work:work-*:2.3.4. Phiên bản 2.3.4 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi khiến nhiều thực thể của các Worker lâu dài vẫn chạy sau khi vượt quá thời hạn thực thi 10 phút. (aosp/1247484, b/150553353)
  • Khắc phục lỗi IssueRegistry tìm lỗi mã nguồn của WorkManager. Xin cảm ơn @ZacSweers từ Slack, vì những đóng góp này. (aosp/1217923)

Phiên bản 2.3.3

Phiên bản 2.3.3

Ngày 4 tháng 3 năm 2020

Phát hành androidx.work:work-*:2.3.3. Phiên bản 2.3.3 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi khi Worker bị gián đoạn thì sẽ không được lên lịch lại đúng cách. (b/150325687, aosp/1246571)

Phiên bản 2.3.2

Phiên bản 2.3.2

Ngày 19 tháng 2 năm 2020

Phát hành androidx.work:work-*:2.3.2. Phiên bản 2.3.2 bao gồm các thay đổi sau.

Sửa lỗi

  • Sửa lỗi WorkManager vượt quá giới hạn 100 công việc trong JobScheduler (ở một số rất ít trường hợp). (aosp/1226859, b/149092520)
  • Khắc phục một điều kiện tương tranh (race condition) trong ConstraintControllers. (aosp/1220100)
  • Cải tiến phương thức quản lý vòng đời dịch vụ trên nền trước cho các Trình thực thi (Worker) lâu dài. (aosp/1226295)
  • Cải tiến việc quản lý phương thức huỷ bỏ các Thông báo (Notifications) của các Trình thực thi (Worker) lâu dài trên phương thức huỷ bỏ trình thực thi. (aosp/1228346)

Phiên bản 2.3.1

Phiên bản 2.3.1

Ngày 5 tháng 2 năm 2020

Phát hành androidx.work:work-*:2.3.1. Phiên bản 2.3.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Quản lý tốt hơn vòng đời của các Notification dành cho các Worker lâu dài khi Service trên nền trước hoạt động. (aosp/1218539, b/147249312)
  • WorkManager nay tuỳ thuộc vào androidx.sqlite:sqlite-framework:2.1.0 ổn định. (aosp/1217729)
  • Thêm các quy tắc Lint (tìm lỗi mã nguồn) để đảm bảo rằng một foregroundServiceType được chỉ định trong AndroidManifest.xml khi sử dụng các foregroundServiceType trong ForegroundInfo. (aosp/1214207, b/147873061)

Phiên bản 2.3.0

Phiên bản 2.3.0

Ngày 22 tháng 1 năm 2020

Phát hành androidx.work:work-*:2.3.0 và không có thay đổi nào kể từ 2.3.0-rc01. Phiên bản 2.3.0 bao gồm các thay đổi sau.

Các thay đổi quan trọng kể từ phiên bản 2.2.0

  • Hỗ trợ các công việc lâu dài hoặc công việc quan trọng thông qua ListenableWorker#setForegroundAsync().
  • Hỗ trợ đối với Tến độ (Progress) của Trình thực thi (Worker) thông qua ListenableWorker#setProgressAsync().
  • WorkManager hiện đóng gói các quy tắc Lint (tìm lỗi mã nguồn) bổ sung vào thư viện để giúp phát hiện sớm các lỗi.

Phiên bản 2.3.0-rc01

Ngày 8 tháng 1 năm 2020

Phát hành androidx.work:work-*:2.3.0-rc01. Phiên bản 2.3.0-rc01 bao gồm các thay đổi sau.

Bản phát hành này hoàn toàn giống với phiên bản 2.3.0-beta02

Sửa lỗi

  • Cấu phần phần mềm work-testing hiện khai báo một phần phụ thuộc api trên work-runtime-ktx. (aosp/1194410)

Phiên bản 2.3.0-beta02

Ngày 18 tháng 12 năm 2019

Phát hành androidx.work:work-*:2.3.0-beta02. Phiên bản 2.3.0-beta02 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm thông báo lỗi tốt hơn đối với các ngoại lệ SQLite không thể khôi phục. (aosp/1185777)
  • Thêm một quy tắc Lint (tìm lỗi mã nguồn) đảm bảo rằng nhà cung cấp nội dung androidx.work.impl.WorkManagerInitializer sẽ bị xoá khỏi AndroidManifest.xml khi sử dụng phương thức khởi chạy theo yêu cầu (on demand initialization). (aosp/1167007)
  • Thêm cảnh báo Lint (tìm lỗi mã nguồn) khi sử dụng enqueue() cho PeriodicWorkRequest thay vì enqueueUniquePeriodicWork(). (aosp/1166032)

Các thay đổi về API

  • Hiện tại, ForegroundInfo yêu cầu bạn chỉ định notificationId để sử dụng khi đang sử dụng ListenableWorker.setForegroundAsync(). Đây là một thay đổi có thể gây lỗi. Điều này cho phép bạn chạy song song nhiều Worker lâu dài. WorkManager cũng quản lý tốt hơn thời gian hoạt động của các Notification được cung cấp. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Sửa lỗi

  • Khắc phục lỗi trong phương thức triển khai AlarmManager, trong đó các chuông báo không được dọn dẹp đúng cách. (aosp/1156444)
  • Sửa lỗi một danh sách WorkRequest trống sẽ dẫn đến việc tạo chuỗi WorkContinuation không chính xác. (b/142835274, aosp/1157051)

Các thay đổi về phần phụ thuộc

  • WorkManager hiện sử dụng Room 2.2.2.

Phiên bản 2.3.0-beta01

Ngày 20 tháng 11 năm 2019

Phát hành androidx.work:work-*:2.3.0-beta01. Phiên bản 2.3.0-beta01 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm một quy tắc Lint (tìm lỗi mã nguồn) mới để ngăn các lỗi nhà phát triển do phương thức triển khai của androidx.work.Configuration.Provider không chính xác khi sử dụng tính năng khởi chạy theo yêu cầu. aosp/1164559

Phiên bản 2.3.0-alpha03

Ngày 23 tháng 10 năm 2019

Phát hành androidx.work:work-*:2.3.0-alpha03. Phiên bản 2.3.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Thêm API WorkManager.createCancelPendingIntent() để dễ dàng huỷ các WorkRequest mà không cần phải đăng ký một thành phần khác trong AndroidManifest.xml. API này giúp bạn dễ dàng huỷ các WorkRequest khỏi các Notification. Chúng tôi hy vọng API này sẽ được ghép nối với các API nền trước mới trong phiên bản 2.3.0.
  • WorkManager hiện phụ thuộc vào androidx.room:*:2.2.0 ổn định.

Các thay đổi về API

  • Đổi tên ForegroundInfo.getNotificationType() thành ForegroundInfo.getForegroundServiceType() để nhất quán hơn với các API nền tảng cơ bản. (b/142729893, aosp/1143316)

Sửa lỗi

  • Sửa lỗi gây ra do một lệnh gọi không cần thiết đến setTransactionSuccessful() bên ngoài một giao dịch. Lỗi này xảy ra đối với một số rất ít trường hợp di chuyển. (b/142580433, aosp/1141737)

Phiên bản 2.3.0-alpha02

Ngày 9 tháng 10 năm 2019

Phát hành androidx.work:work-*:2.3.0-alpha02. Phiên bản 2.3.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • WorkManager hiện hỗ trợ chạy các công việc lâu dài hoặc công việc quan trọng mà hệ điều hành cần lưu giữ. Để biết thêm thông tin, hãy xem ListenableWorker#setForegroundAsync() (hoặc CoroutineWorker#setForeground() đối với Kotlin). (aosp/1133636)

Các thay đổi về API

  • API containsKey trong Data được đổi tên thành hasKeyWithValueOfType. Phương thức mở rộng tương ứng trong thư viện ktx cũng đã được đổi tên. (b/141916545)

Sửa lỗi

  • Lịch biểu của WorkManager hoạt động khá ổn định khi số lượng WorkRequest đã xếp vào hàng tiệm cận với các giới hạn về lập lịch. (aosp/1105766)
  • WorkManager chỉ gọi ListenableWorker#onStopped() nếu công việc chưa hoàn tất. (b/140055777)
  • WorkManager hiện xoá thông tin tiến trình khi một trình thực thi (worker) bị gián đoạn hoặc đến trạng thái cuối. (aosp/1114572)
  • Data hiện có phương thức trình bày toString() hữu ích hơn rất nhiều. (b/140945323)
  • Data hiện có phương thức equals() phù hợp hơn. Phương thức này cũng hỗ trợ deepEquals cho các kiểu Array. (b/140922528)
  • WorkManager hiện lưu trữ các cơ sở dữ liệu nội bộ và các tệp lựa chọn ưu tiên trong một thư mục không sao lưu. (b/114808216)

Phiên bản 2.3.0-alpha01

Ngày 22 tháng 8 năm 2019

Phát hành androidx.work:work-*:2.3.September 5, 20190-alpha01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Hiện tại, ListenableWorker có thể thiết lập tiến trình thông qua API setProgressAsync(). Đồng thời đã thêm một API setProgress suspend tương ứng trongCoroutineWorker và một setProgress trong RxWorker sẽ trả về một Single<Void>. Với các API mới này, các trình thực thi (Worker) có thể truyền tải thông tin tiến trình qua WorkInfo có API getProgress tương ứng. (b/79481554)
  • Data có một API containsKey() dùng để xác thực dữ liệu đầu vào cho các Worker có các khoá thuộc kiểu đã dự kiến. (b/117136838)
  • Data hiện có thể được tuần tự hoá bằng cách sử dụng Data.toByteArray()Data.fromByteArray(). Lưu ý rằng không có sự đảm bảo về việc lập phiên bản Data, vì vậy, bạn không nên giữ nguyên hoặc sử dụng dữ liệu này cho IPC giữa các ứng dụng. Các dữ liệu này chỉ được sử dụng an toàn giữa nhiều quá trình của cùng một ứng dụng.
  • Thêm chức năng chỉ định InputMergerFactory thông qua Configuration.setInputMergerFactory. (b/133273159)

Các thay đổi về API

  • WorkManager sẽ gửi một thực thể của IllegalStateException nếu một WorkerFactory trả về một thực thể ListenableWorker đã được gọi trước đó. (b/139554406)
  • Tài liệu cập nhật về việc phương thức huỷ bỏ ListenableFuture và lệnh gọi lại onStopped() trong ListenableWorker. (b/138413671)

Sửa lỗi

  • Trình lập lịch biểu trong quá trình hiện bỏ qua các WorkRequest với các quy tắc ràng buộc idle. Hiện tại, JobScheduler chỉ tiếp nhận các yêu cầu này khi thiết bị thực sự trong trạng thái idle. (aosp/1089779)
  • TestScheduler hiện sử dụng chính xác Executor được chỉ định cho trình thực thi tác vụ nội bộ của mình trong các hoạt động kiểm thử. (aosp/1090749)

Phiên bản 2.2.0

Phiên bản 2.2.0

Ngày 15 tháng 8 năm 2019

Phát hành androidx.work:work-*:2.2.0. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Bản phát hành này hoàn toàn giống với phiên bản androidx.work:work-*:2.2.0-rc01.

Các thay đổi quan trọng trong phiên bản 2.2.0 so với phiên bản 2.1.0

androidx.work:work-gcm:2.2.0 là một cấu phần phần mềm Maven mới, hỗ trợ việc sử dụng GCMNetworkManager làm trình lập lịch biểu khi Dịch vụ Google Play có sẵn đối với các API cấp 22 trở xuống. Đây là phần phụ thuộc tuỳ chọn giúp xử lý nền hiệu quả và đáng tin cậy hơn trên các phiên bản API cũ hơn. Nếu ứng dụng của bạn sử dụng Dịch vụ Google Play, hãy thêm phần phụ thuộc này vào tệp gradle của bạn để tự động nhận hỗ trợ của GCMNetworkManager. Nếu không có Dịch vụ Google Play, WorkManager sẽ tiếp tục quay lại AlarmManager trên các thiết bị cũ.

Phiên bản 2.2.0-rc01

Ngày 30 tháng 7 năm 2019

Phát hành androidx.work:work-*:2.2.0-rc01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Sửa lỗi trong phương thức triển khai AlarmManager, khiến Dịch vụ bị tắt sớm và dẫn đến RejectedExecutionException trong một số ít trường hợp. (aosp/1092374) (b/138238197).
  • Thêm một phương án giải quyết cho một NullPointerException khi sử dụng các API JobScheduler trên một số thiết bị. (aosp/1091020) (b/138364061), (b/138441699)

Phiên bản 2.2.0-beta02

Ngày 19 tháng 7 năm 2019

Phát hành androidx.work:work-*:2.2.0-beta02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Xoá phần phụ thuộc jacoco ngoài ý muốn đã được giới thiệu trong 2.2.0-beta01.

Phiên bản 2.2.0-beta01

Ngày 17 tháng 7 năm 2019

Phát hành androidx.work:work-*:2.2.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • androidx.work:work-gcm:2.2.0-beta01 là một cấu phần phần mềm Maven mới, hỗ trợ việc sử dụng GCMNetworkManager làm trình lập lịch biểu khi Dịch vụ Google Play có sẵn đối với các API cấp 22 trở xuống. Đây là phần phụ thuộc tuỳ chọn giúp xử lý nền hiệu quả và đáng tin cậy hơn trên các phiên bản API cũ hơn. Nếu ứng dụng của bạn sử dụng Dịch vụ Google Play, hãy thêm phần phụ thuộc này vào tệp gradle của bạn để tự động nhận hỗ trợ của GCMNetworkManager. Nếu không có Dịch vụ Google Play, WorkManager sẽ tiếp tục quay lại AlarmManager trên các thiết bị cũ.

Sửa lỗi

  • Sửa lỗi cho IllegalArgumentException khi theo dõi trạng thái mạng trên các máy tính bảng Nvidia Shield K1. (aosp/1010188)

Phiên bản 2.1.0

Phiên bản 2.1.0

Ngày 11 tháng 7 năm 2020

Phát hành androidx.work:work-*:2.1.0. Bản phát hành này hoàn toàn giống với phiên bản androidx.work:work-*:2.1.0-rc01.

Các thay đổi quan trọng kể từ phiên bản 2.0.1

  • work-runtime-ktx hiện yêu cầu Java 8. Nếu gặp vấn đề, bạn có thể thêm phần sau vào build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • Thêm tính năng khởi chạy theo yêu cầu dành cho WorkManager, tính năng này sẽ chỉ tạo WorkManager khi được tham chiếu. b/127497100 Để thiết lập dự án của bạn nhằm sử dụng tính năng khởi chạy theo yêu cầu:
    1. Tắt trình khởi chạy tự động.
    2. Triển khai Configuration.Provider trên đối tượng Application tuỳ chỉnh của bạn.
    3. Thay đổi tất cả tham chiếu của WorkManager.getInstance() thành WorkManager.getInstance(Context). Trong quá trình thay đổi này, chúng tôi đã ngừng sử dụng WorkManager.getInstance(). Việc gọi phương thức thay thế WorkManager.getInstance(Context) mới sẽ luôn an toàn hơn, ngay cả khi bạn không thực hiện việc khởi chạy theo yêu cầu.
  • Các PeriodicWorkRequest hiện hỗ trợ độ trễ ban đầu. Bạn có thể sử dụng phương thức setInitialDelay trên PeriodicWorkRequest.Builder để thiết lập độ trễ ban đầu. b/111404867
  • Thêm chức năng uỷ quyền cho một hoặc nhiều WorkerFactory đã đăng ký bằng cách sử dụng DelegatingWorkerFactory. b/131435993
  • Thêm chức năng tuỳ chỉnh Executor do WorkManager sử dụng dành cho tất cả hoạt động lưu giữ nội bộ thông qua Configuration.Builder.setTaskExecutor.
  • Thêm chức năng tạo các lớp WorkerListenableWorker có thể kiểm thử đơn vị bằng cách sử dụng TestWorkerBuilderTestListenableWorkerBuilder trong cấu phần phần mềm work-testing.
    • Lưu ý rằng giờ đây, work-testing sẽ lấy Kotlin làm phần phụ thuộc và sử dụng một số phần mở rộng Kotlin theo mặc định.
  • Thêm số lần cố gắng chạy vào WorkInfo. b/127290461
  • Hiện tại, các kiểu Data có thể lưu trữ và truy xuất các byte và các mảng byte. Điều này KHÔNG thay đổi kích thước tối đa của đối tượng Data.
  • Hiện tại, WorkManager phụ thuộc vào Room 2.1.0 và điều này sẽ khắc phục một số sự cố cơ sở dữ liệu.

Phiên bản 2.1.0-rc01

Ngày 27 tháng 6 năm 2019

Phát hành androidx.work:work-*:2.1.0-rc01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Sửa lỗi khiến ứng dụng gặp sự cố khi thực thi các công việc với JobScheduler trong khi quá trình sao lưu đang diễn ra b/135858602.

Phiên bản 2.1.0-beta02

Ngày 20 tháng 6 năm 2019

Phát hành androidx.work:work-*:2.1.0-beta02. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • TestListenableWorkerBuilder hiện sử dụng đúng WorkerFactory khi tạo các thực thể của ListenableWorker. b/135275844
  • Khắc phục lỗi dẫn đến sự cố trôi (drift) trong các cửa sổ thực thi của các WorkRequest do quá trình xử lý bị gián đoạn (process death). b/135272196

Phiên bản 2.1.0-beta01

Ngày 13 tháng 6 năm 2019

Phát hành androidx.work:work-*:2.1.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Hiện tại, WorkManager phụ thuộc vào Room 2.1.0 và điều này sẽ khắc phục một số sự cố cơ sở dữ liệu.
  • Xoá một số vùng lưu trữ I/O khởi động trên luồng chính.
  • Khắc phục tình trạng tắc nghẽn tiềm ẩn trong quá trình theo dõi quy tắc ràng buộc. b/134361006
  • Huỷ trước các công việc không hợp lệ được phân bổ cho WorkManager. b/134058261
  • Thêm một số lệnh gọi phòng vệ vào các API JobScheduler dành cho các thiết bị hoạt động không đúng cách.

Phiên bản 2.1.0-alpha03

Ngày 5 tháng 6 năm 2019

Phát hành androidx.work:*:2.1.0-alpha03.

Sửa lỗi

  • Cải thiện tài liệu dành cho các PeriodicWorkRequest.
  • Hiện tại, WorkManagerTestInitHelper sử dụng đúng trình thực thi nền trong các hoạt động kiểm thử.
  • Khắc phục các vấn đề về SQLite khi xử lý các giao dịch khối lượng lớn trên một số thiết bị. (b/130182503)
  • Hiện tại, các phần phụ thuộc của WorkManager trở nên chi tiết hơn. (b/133169148).
  • Giải quyết các lỗi OEM cụ thể trong phương thức triển khai JobScheduler khi lên lịch công việc bằng WorkManager.
  • Cải tiến nhiều điểm trong trình lập lịch biểu dựa trên AlarmManager xung quanh thời gian hoạt động của dịch vụ, nhờ đó giải quyết một số sự cố hiếm gặp. (b/133313734)

Phiên bản 2.1.0-alpha02

Ngày 16 tháng 5 năm 2019

WorkManager 2.1.0-alpha02 được phát hành. Phiên bản này chứa một số API mới.

Các thay đổi về API

  • Các PeriodicWorkRequest hiện hỗ trợ độ trễ ban đầu. Bạn có thể sử dụng phương thức setInitialDelay trên PeriodicWorkRequest.Builder để thiết lập độ trễ ban đầu. b/111404867

  • Thêm chức năng uỷ quyền cho một hoặc nhiều WorkerFactory đã đăng ký bằng cách sử dụng DelegatingWorkerFactory. b/131435993

  • Thêm chức năng tuỳ chỉnh Executor do WorkManager sử dụng dành cho tất cả hoạt động lưu giữ nội bộ thông qua Configuration.Builder.setTaskExecutor.

  • Cải tiến tài liệu về WorkRequest.keepResultsForAtLeast (b/130638001), tính năng khởi chạy theo yêu cầu và PeriodicWorkRequest.Builder (b/131711394).

Phiên bản 2.1.0-alpha01

Ngày 24 tháng 4 năm 2019

Phát hành WorkManager 2.1.0-alpha01. Phiên bản này chứa một số API mới. Xin lưu ý rằng bắt đầu từ phiên bản này, các tính năng mới sẽ không được điều chỉnh ngược dòng cho các bản phát hành 1.x. Chúng tôi khuyến nghị bạn chuyển sang 2.x.

Các thay đổi về API

  • Thêm tính năng khởi chạy theo yêu cầu dành cho WorkManager, tính năng này sẽ chỉ tạo WorkManager khi được tham chiếu. b/127497100 Để thiết lập dự án của bạn nhằm sử dụng tính năng khởi chạy theo yêu cầu:
    1. Tắt trình khởi chạy tự động.
    2. Triển khai Configuration.Provider trên đối tượng Application tuỳ chỉnh của bạn.
    3. Thay đổi tất cả tham chiếu của WorkManager.getInstance() thành WorkManager.getInstance(Context). Trong quá trình thay đổi này, chúng tôi đã ngừng sử dụng WorkManager.getInstance(). Việc gọi phương thức thay thế WorkManager.getInstance(Context) mới sẽ luôn an toàn hơn, ngay cả khi bạn không thực hiện việc khởi chạy theo yêu cầu.
  • Thêm chức năng tạo các lớp WorkerListenableWorker có thể kiểm thử đơn vị bằng cách sử dụng TestWorkerBuilderTestListenableWorkerBuilder trong cấu phần phần mềm work-testing.
    • Lưu ý rằng giờ đây, work-testing sẽ lấy Kotlin làm phần phụ thuộc và sử dụng một số phần mở rộng Kotlin theo mặc định.
  • Thêm số lần cố gắng chạy vào WorkInfo. b/127290461
  • Hiện tại, các kiểu Data có thể lưu trữ và truy xuất các byte và các mảng byte. Điều này KHÔNG thay đổi kích thước tối đa của đối tượng Data.
  • Ngừng sử dụng CoroutineWorker.coroutineContext. Trường này đã được phân loại không chính xác thành CoroutineDispatcher. Bạn không cần đến trường này nữa vì bạn có thể tự chuyển đến coroutineContext mong muốn trong phần nội dung của hàm tạm ngưng.
  • RxWorker.createWork()RxWorker.getBackgroundScheduler() hiện được chú thích với các kiểu trả về của @NonNull.

Phiên bản 2.0.1

Phiên bản 2.0.1

Ngày 9 tháng 4 năm 2019

Phát hành WorkManager 2.0.1. Bản phát hành này hoàn toàn giống với phiên bản 2.0.1-rc01.

Phiên bản 2.0.1-rc01

Ngày 3 tháng 4 năm 2019

WorkManager 2.0.1-rc01 được phát hành. Phiên bản này chứa một số phần sửa lỗi. Đối với người dùng phiên bản 1.x cũ, một số trong các thay đổi này cũng xuất hiện trong phiên bản 1.0.1-rc01.

Sửa lỗi

  • Tính năng kiểm thử Robolectric hiện hoạt động đúng cách với WorkManager. b/122553577
  • Khắc phục một trường hợp phức tạp (edge case) gây sự cố, trong đó các tài nguyên dùng để theo dõi các quy tắc ràng buộc không được dọn dẹp trên các API pre-JobScheduler. b/129226383
  • Khắc phục lỗi StackOverflowError xử lý các chuỗi công việc dài. b/129091233
  • Cập nhật tài liệu dành cho các PeriodicWorkRequest để chỉ ra rằng API 23 không hỗ trợ thời gian linh hoạt (flex time).
  • Khắc phục một số đường liên kết bị hỏng trong tài liệu về Kotlin.

Phiên bản 2.0.0

Phiên bản 2.0.0

Ngày 20 tháng 3 năm 2019

WorkManager 2.0.0 được phát hành. Phiên bản này hoàn toàn giống với phiên bản 2.0.0-rc01 và là phiên bản AndroidX 1.0.0 ổn định với các phần phụ thuộc AndroidX. Bạn nên nhắm mục tiêu phiên bản này thay vì các phiên bản 1.x cũ. Mọi hoạt động phát triển sẽ chủ động nhắm mục tiêu đến phiên bản 2.x và phiên bản 1.x sẽ chỉ nhận được các bản sửa lỗi quan trọng trong thời gian có hạn.

Phiên bản 2.0.0-rc01

Ngày 7 tháng 3 năm 2019

WorkManager 2.0.0-rc01 được phát hành. Phiên bản này hoàn toàn giống với phiên bản 1.0.0 ổn định nhưng có các phần phụ thuộc AndroidX. Khi đã phát triển đến phiên bản ổn định 2.0.0, bạn nên sử dụng phiên bản này và các phiên bản 1.x cũ sẽ chỉ nhận được một số phần sửa lỗi quan trọng. Mọi hoạt động phát triển sẽ chủ động nhắm mục tiêu đến phiên bản 2.x.

Phần phụ thuộc trước AndroidX

Để biết thông tin về cách sử dụng phần mở rộng Kotlin, hãy xem Tài liệu KTX.
Tài liệu tham khảo: Java

Groovy

dependencies {
    def work_version = "1.0.1"

    // (Java only)
    implementation "android.arch.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "android.arch.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "android.arch.work:work-rxjava2:$work_version"
    // optional - Test helpers
    androidTestImplementation "android.arch.work:work-testing:$work_version"
}

Kotlin

dependencies {
    val work_version = "1.0.1"

    // (Java only)
    implementation("android.arch.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("android.arch.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("android.arch.work:work-rxjava2:$work_version")

    // optional - Test helpers
    androidTestImplementation("android.arch.work:work-testing:$work_version")
}

Phiên bản 1.0.1

Phiên bản 1.0.1

Ngày 9 tháng 4 năm 2019

WorkManager 1.0.1 được phát hành. Bản phát hành này hoàn toàn giống với phiên bản 1.0.1-rc01.

Xin lưu ý rằng chúng tôi đặc biệt khuyến khích người dùng cập nhật lên WorkManager 2.x vì trong tương lai sẽ có rất ít bản cập nhật dành cho nhánh phiên bản 1.x. Các API mới cũng sẽ không được phát hành cho thư viện 1.x.

Phiên bản 1.0.1-rc01

Ngày 2 tháng 4 năm 2019

WorkManager 1.0.1-rc01 được phát hành. Phiên bản này chứa một số phần sửa lỗi.

Sửa lỗi

  • Tính năng kiểm thử Robolectric hiện hoạt động đúng cách với WorkManager. b/122553577
  • Khắc phục một trường hợp phức tạp (edge case) gây sự cố, trong đó các tài nguyên dùng để theo dõi các quy tắc ràng buộc không được dọn dẹp trên các API pre-JobScheduler. b/129226383
  • Khắc phục lỗi StackOverflowError xử lý các chuỗi công việc dài. b/129091233

Phiên bản 1.0.0

Phiên bản 1.0.0

Ngày 5 tháng 3 năm 2019

Đây là bản phát hành ổn định 1.0.0 của WorkManager. Phiên bản này của WorkManager giống với phiên bản 1.0.0-rc02.

Phiên bản 1.0.0-rc02

Ngày 21 tháng 2 năm 2019

Đây là bản phát hành dùng thử (release candidate) thứ hai dành cho bản phát hành ổn định 1.0.0 của WorkManager. Bản phát hành này có hai phần sửa lỗi.

Sửa lỗi

  • Các Worker hiện đã được lên lịch chính xác sau khi xảy ra sự cố ứng dụng. b/124546316

  • Hiện tại, các Worker gửi một Exception chưa được đánh dấu sẽ được đánh dấu chính xác là FAILED và không còn gặp sự cố trong quá trình tải ứng dụng.

Phiên bản 1.0.0-rc01

Ngày 14 tháng 2 năm 2019

Đây là bản phát hành dùng thử (release candidate) dành cho bản phát hành ổn định 1.0.0 của WorkManager. Bản phát hành này đã sửa một lỗi.

Sửa lỗi

  • Phương thức triển khai dựa trên AlarmManager hiện tuân thủ chính xác các thời lượng của flex dành cho các PeriodicWorkRequest. b/124274584

Phiên bản 1.0.0-beta05

Ngày 6 tháng 2 năm 2019

Bản phát hành này có một số bản sửa lỗi.

Sửa lỗi

  • Khắc phục một trường hợp JobScheduler.getPendingJob(...) được sử dụng trên API 23. b/123893059
  • Khắc phục một NullPointerException trên các thiết bị chạy Android 5.1 (API cấp 22) trở xuống. b/123835104

Phiên bản 1.0.0-beta04

Ngày 4 tháng 2 năm 2019

Bản phát hành này có một số bản sửa lỗi.

Sửa lỗi

  • Cải tiến việc lên lịch biểu của PeriodicWork đối với phương thức triển khai dựa trên AlarmManager.
  • Khắc phục trường hợp WorkManager không theo dõi được chính xác các quy tắc ràng buộc khi sử dụng phương thức triển khai dựa trên AlarmManager. b/123379508
  • Khắc phục trường hợp WorkManager không thể thử lại công việc trên quá trình bị gián đoạn (process death) khi sử dụng phương thức triển khai dựa trên AlarmManager. b/123329850
  • Khắc phục trường hợp dẫn đến WorkManager bị rò rỉ Wakelocks khi sử dụng phương thức triển khai dựa trên AlarmManager.

Phiên bản 1.0.0-beta03

Ngày 25 tháng 1 năm 2019

Bản phát hành này có một số phần sửa lỗi.

Sửa lỗi

  • Chúng tôi đã ra mắt một phiên bản hồi quy 1.0.0-beta02 khiến công việc không được thực thi đúng trong một số trường hợp. b/123211993
  • Khắc phục trường hợp công việc không tuân thủ đúng thời gian chờ. b/122881597
  • Khắc phục một ConcurrentModificationException trên các thiết bị chạy Android 5.1 (API cấp 22) trở xuống. Đây là phần tiếp theo của bản sửa lỗi trong 1.0.0-beta02. b/121345393
  • Thêm exported=false cho một số thành phần trong tệp kê khai bị thiếu chú thích này.
  • Thêm thông tin về cách WorkManager tương tác với hệ điều hành trong tài liệu đi kèm với các cấp độ của gói.

Phiên bản 1.0.0-beta02

Ngày 15 tháng 1 năm 2019

Bản phát hành này có một số bản sửa lỗi.

Sửa lỗi

  • Khắc phục một trường hợp phức tạp (edge case), trong đó công việc định kỳ có thể chạy nhiều lần trong mỗi khoảng thời gian trên các thiết bị chạy Android 6.0 (API cấp 23). b/121998363
  • Khắc phục một ConcurrentModificationException trên các thiết bị chạy Android 5.1 (API cấp 22) trở xuống. b/121345393
  • Khắc phục lỗi thực thi công việc khi không đáp ứng các quy tắc Ràng buộc trên các thiết bị chạy Android 5.1 (API cấp 22) trở xuống. b/122578012
  • Đã tối ưu hoá việc xử lý hoàn thành công việc để trở nên nhanh hơn trong một số trường hợp phức tạp. b/122358129
  • Thêm một thay đổi để giải quyết các điều kiện tương tranh (race condition) tiềm ẩn trong nhiều thực thể của LiveData mà WorkManager sử dụng.
  • Chuyển sang sử dụng phần phụ thuộc Room phiên bản 1.1.1 thay vì 1.1.1-rc01; các phiên bản này hoàn toàn giống nhau. b/122578011

Phiên bản 1.0.0-beta01

Ngày 19 tháng 12 năm 2018

Bản phát hành này không chứa nội dung thay đổi API nào. Từ giờ trở đi, WorkManager dự kiến sẽ duy trì API ổn định cho đến phiên bản tiếp theo trừ khi có sự cố nghiêm trọng. Bản phát hành này có một số phần sửa lỗi.

Sửa lỗi

  • Các phần tử con đã huỷ trước đó của công việc thuộc lớp cha đã hoàn thành thành công sẽ không còn chạy được nữa. b/120811767
  • Các lớp ghi nhật ký đã được khởi tạo đúng cách (chủ yếu xuất hiện trong quá trình kiểm thử).

Phiên bản 1.0.0-alpha13

Ngày 12 tháng 12 năm 2018

Bản phát hành này có một sự thay đổi nhỏ về API sẽ hữu ích cho một số người dùng Kotlin.

Các thay đổi về API

  • Chuyển androidx.work.Result làm lớp bên trong của ListenableWorker. Điều này giúp ngăn chặn việc tái cấu trúc xung đột với lớp Result cấp cao của Kotlin. Đây là một thay đổi có thể gây lỗi API. b/120564418

Thay đổi về API có thể gây lỗi

  • Chuyển androidx.work.Result làm lớp bên trong của ListenableWorker.

Phiên bản 1.0.0-alpha12

Ngày 5 tháng 12 năm 2018

Bản phát hành này chứa một số thay đổi về API có thể gây lỗi; xin vui lòng xem phần Các thay đổi về API có thể gây lỗi bên dưới. Phiên bản này có thể sẽ được phát hành dưới dạng phiên bản beta đầu tiên của chúng tôi. alpha12 cũng chứa nội dung cập nhật tài liệu mở rộng.

Các thay đổi về API

  • Cấu phần phần mềm mới work-rxjava2, giới thiệu RxWorker. Đây là ListenableWorker dự kiến có Single<Payload>.
  • Chúng tôi đã ngừng hỗ trợ Firebase JobDispatcher do sắp ngừng sử dụng. Điều này có nghĩa là cấu phần phần mềm work-firebase sẽ không còn được cập nhật khi chúng tôi chuyển sang giai đoạn thử nghiệm. Chúng tôi sẽ tìm cách bổ sung một giải pháp thay thế trong tương lai.
  • Kết hợp Payload vào Result. Result hiện là một "lớp kín" với 3 cách triển khai cụ thể mà bạn có thể thu được qua Result.success() (hoặc Result.success(Data)), Result.failure() (hoặc Result.failure(Data)) và Result.retry(). Các ListenableFuture của bạn nay nhận được Result thay vì Payload. Worker không có các phương thức getter và setter cho đầu ra Data. Đây là một thay đổi có thể gây lỗi.
  • Thêm Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) cùng các biến thể để hỗ trợ tốt hơn cho việc kích hoạt chậm (slow triggering) các URI nội dung. b/119919774
  • Thêm biến thể WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Phương thức này yêu cầu API 26.
  • Thêm các phương thức mở rộng Kotlin Operation.await()ListenableFuture.await().
  • Đổi tên Operation.getException() thành Operation.getThrowable(). Đây là một thay đổi có thể gây lỗi.
  • Lớp và phương thức ContentUriTriggers tham chiếu đến lớp này sẽ không dùng được cho mục đích công khai nữa. Đây là một thay đổi có thể gây lỗi.
  • Xoá các phương thức vararg còn lại trong WorkManager, WorkContinuationOneTimeWorkRequest để tinh giản API. Để khắc phục sự cố xây dựng, bạn có thể gói vararg hiện có của mình bằng Arrays.asList(...). Chúng tôi vẫn cung cấp các phiên bản của từng phương thức. Đây là một thay đổi có thể gây lỗi.
  • Xoá các biến thể WorkContinuation.combine(OneTimeWorkRequest, *). Các biến thể này đã đưa ra một API khó hiểu. Các phương thức combine hiện tại dễ hiểu hơn. Đây là một thay đổi có thể gây lỗi.

Sửa lỗi

  • Việc triển khai Pre-Marshmallow hiện đáng tin cậy hơn trong việc khôi phục từ quá trình kết thúc một tác vụ đã thực thi.
  • LiveData được quan sát qua observeForever được theo dõi qua WorkManager. Đây là bản sửa lỗi điều chỉnh cho phiên bản cũ của một thư viện Room. b/74477406
  • Hiện tại, Data.Builder.build() sẽ tạo ra một trường hợp ngoại lệ nếu đối tượng nối tiếp vượt quá kích thước tối đa. Trước đây, lỗi này chỉ xảy ra trên một chuỗi trong nền mà bạn không thể xử lý đúng cách.
  • Phân biệt nâng cao công việc đã dừng so với công việc đã huỷ; getWorkInfoById() sẽ trả về một WorkInfo với CANCELLED State trong quá trình ListenableWorker.onStopped().
  • Coi null Result là lỗi trong ListenableWorker. b/120362353
  • Bản sửa lỗi suy đoán cho Máy tính bảng Shield chạy API 24 mà đôi khi cho ra một IllegalArgumentException. b/119484416

Thay đổi về API có thể gây lỗi

  • Chúng tôi đã ngừng hỗ trợ Firebase JobDispatcher do sắp ngừng sử dụng. Điều này có nghĩa là cấu phần phần mềm work-firebase sẽ không còn được cập nhật khi chúng tôi chuyển sang giai đoạn thử nghiệm. Chúng tôi sẽ tìm cách bổ sung một giải pháp thay thế trong tương lai.
  • Kết hợp Payload vào Result. Result hiện là một "lớp kín" với 3 cách triển khai cụ thể mà bạn có thể thu được qua Result.success() (hoặc Result.success(Data)), Result.failure() (hoặc Result.failure(Data)) và Result.retry(). Các ListenableFuture của bạn nay nhận được Result thay vì Payload. Worker không có các phương thức getter và setter cho đầu ra Data.
  • Thêm các phương thức mở rộng Kotlin Operation.await()ListenableFuture.await().
  • Đổi tên Operation.getException() thành Operation.getThrowable().
  • Lớp và phương thức ContentUriTriggers tham chiếu đến lớp này sẽ không dùng được cho mục đích công khai nữa.
  • Xoá các phương thức vararg còn lại trong WorkManager, WorkContinuationOneTimeWorkRequest để tinh giản API. Để khắc phục sự cố xây dựng, bạn có thể gói vararg hiện có của mình bằng Arrays.asList(...). Chúng tôi vẫn cung cấp các phiên bản của từng phương thức.
  • Xoá các biến thể WorkContinuation.combine(OneTimeWorkRequest, *). Các biến thể này đã đưa ra một API khó hiểu. Các phương thức combine hiện tại dễ hiểu hơn.

Phiên bản 1.0.0-alpha11

Ngày 8 tháng 11 năm 2018

Bản phát hành này chứa nhiều thay đổi sẽ trở thành API ổn định tại giai đoạn beta. Bản phát hành này có các thay đổi về API có thể gây lỗi; vui lòng xem phần Các thay đổi về API có thể gây lỗi bên dưới.

Các thay đổi về API

  • work-runtime-ktx ra mắt một CoroutineWorker mới.
  • WorkStatus đổi tên thành WorkInfo Tất cả biến thể tương ứng của phương thức getStatus đã được đổi tên thành các biến thể của getWorkInfo tương ứng. Đây là một thay đổi có thể gây lỗi.
  • ListenableWorker.onStopped() không còn chấp nhận việc có đối số boolean cho biết WorkRequest có bị huỷ hay không. WorkManager không còn tạo ra sự khác biệt này nữa. Đây là một thay đổi có thể gây lỗi.
  • Gói androidx.work.test đổi tên thành gói androidx.work.testing. Đây là một thay đổi có thể gây lỗi.
  • Phương thức setter trên Constraints không còn là một phần của API công khai. Đây là một thay đổi có thể gây lỗi.
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() đã trả về các mảng trước đó. Những phương thức này hiện trả về Collections. Đây là một thay đổi có thể gây lỗi.
  • ListenableWorker.onStartWork() đổi tên thành ListenableWorker.startWork(). Đây là một thay đổi có thể gây lỗi.
  • Hàm khởi tạo cho WorkStatus không còn là một phần của API công khai. Đây là một thay đổi có thể gây lỗi.
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() lần lượt được đổi tên thành Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId(). Đây là một thay đổi có thể gây lỗi.
  • Thêm nhiều chú thích @NonNull vào API công khai để cải thiện tính gọn nhẹ (ergonomic) của API.
  • Thêm API WorkManager.enqueueUniqueWork() để thêm các OneTimeWorkRequest duy nhất vào hàng đợi mà không phải tạo WorkContinuation.
  • Tất cả biến thể của các phương thức enqueuecancel trên WorkManager hiện sẽ trả về kiểu Operation mới. Đây là một thay đổi có thể gây lỗi.
  • Tất cả biến thể của enqueue không còn chấp nhận các vararg đối với WorkRequest nữa. Đây là một thay đổi có thể gây lỗi. Hãy sử dụng Bộ sưu tập (Collection). Bạn có thể sử dụng Arrays.asList() để sửa đổi mã hiện có. Chúng tôi làm như vậy để giảm số lượng API và phương thức giao diện.
  • Hiện tại, nếu cố gắng thực hiện initialize WorkManager nhiều lần trong mỗi quá trình, sẽ dẫn đến một IllegalStateException. Đây là một thay đổi có thể gây lỗi.

Sửa lỗi

  • Giờ đây, WorkRequest.Builder trong cấu phần phần mềm work-runtime-ktx hiện sử dụng ListenableWorker. Bản sửa lỗi b/117666259
  • Hãy đảm bảo thời gian chạy tiếp theo của PeriodicWork là trong tương lai. Bản sửa lỗi b/118204399
  • Xoá phần dung lượng lưu trữ I/O có thể được tạo ra khi sử dụng WorkManager lúc khởi động ứng dụng. Bản sửa lỗi b/117796731
  • Khắc phục một tình huống tương tranh trong WorkConstraintsTracker. Khắc phục android-workmanager/issues/56

Thay đổi về API có thể gây lỗi

  • WorkStatus đổi tên thành WorkInfo Tất cả biến thể tương ứng của phương thức getStatus đã được đổi tên thành các biến thể của getWorkInfo tương ứng.
  • ListenableWorker.onStopped() không còn chấp nhận việc có đối số boolean cho biết WorkRequest có bị huỷ hay không. WorkManager không còn tạo ra sự khác biệt này nữa.
  • Gói androidx.work.test đổi tên thành gói androidx.work.testing.
  • Phương thức setter trên Constraints không còn là một phần của API công khai.
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() đã trả về các mảng trước đó. Những phương thức này hiện trả về Collections.
  • ListenableWorker.onStartWork() đổi tên thành ListenableWorker.startWork().
  • Hàm khởi tạo cho WorkStatus không còn là một phần của API công khai.
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() lần lượt được đổi tên thành Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId().
  • Tất cả biến thể của các phương thức enqueuecancel trên WorkManager hiện sẽ trả về kiểu Operation mới.
  • Tất cả biến thể của enqueue không còn chấp nhận các vararg đối với WorkRequest nữa.
  • Hiện tại, nếu cố gắng thực hiện initialize WorkManager nhiều lần trong mỗi quá trình, sẽ dẫn đến một IllegalStateException.

Phiên bản 1.0.0-alpha10

Ngày 11 tháng 10 năm 2018

Bản phát hành này hỗ trợ công việc không đồng bộ do nhà phát triển kiểm soát. Bản phát hành này có các thay đổi về API có thể gây lỗi; vui lòng xem phần Các thay đổi về API có thể gây lỗi bên dưới.

Chúng tôi dự đoán rằng WorkManager sẽ bước vào giai đoạn cuối của giai đoạn alpha. Chúng tôi dự kiến API sẽ ổn định trong giai đoạn beta, vì vậy, vui lòng dành thời gian để gửi phản hồi của bạn trên công cụ theo dõi lỗi của chúng tôi.

Các thay đổi về API

  • Xoá mọi phương thức và lớp deprecated trước đây, đặc biệt là hàm khởi tạo Worker mặc định. Đây là một thay đổi về API có thể gây lỗi.
  • Đổi tên NonBlockingWorker thành ListenableWorker, hiện là một lớp công khai đã không còn ẩn và sẵn sàng để sử dụng.
    • ListenableWorker cung cấp quyền truy cập vào một phương thức trừu tượng (ListenableFuture<Payload> onStartWork()) được gọi trên luồng chính. Bạn có thể bắt đầu và xử lý công việc một cách không đồng bộ. Khi hoàn tất, bạn nên cập nhật ListenableFuture cho phù hợp. Các cách triển khai tham chiếu của ListenableFuture được cung cấp trong gói Futuresalpha02 (xem bên dưới phần WorkManager).
    • Worker mở rộng ListenableWorker và vẫn hoạt động như trước đây, bằng phương thức Result doWork() trừu tượng.
    • Đảo ngẫu nhiên một số phương thức và thành phần từ Worker đến ListenableWorker.
    • Chúng tôi sẽ sớm cung cấp các triển khai tham chiếu cho ListenableWorker sử dụng Kotlin coroutine (khi các phiên bản ổn định đã được phát hành) và RxJava2.
  • Giao diện WorkerFactory và cách triển khai cụ thể DefaultWorkerFactory đã được hợp nhất với một lớp trừu tượng có tên là WorkerFactory. Quá trình triển khai đảm bảo hành vi dựa trên phản ánh mặc định được gọi là nỗ lực cuối cùng đối với mọi phiên bản WorkerFactory do người dùng tạo. Đây là một thay đổi có thể gây lỗi.
  • Xoá WorkManager.synchronous(), WorkContinuation.synchronous() và tất cả phương thức liên quan. Thêm ListenableFuture<Void> làm kiểu trả về của nhiều phương thức về API. Đây là một thay đổi về API có thể gây lỗi.
    • Bạn hiện có thể lấy và quan sát một cách đồng bộ bằng cách sử dụng ListenableFuture. Ví dụ như WorkManager.enqueue() dùng để trả về void; mã này hiện trả về ListenableFuture<Void>. Bạn có thể gọi ListenableFuture.addListener(Runnable, Executor) hoặc ListenableFuture.get() để chạy mã khi hoạt động này hoàn tất.
    • Vui lòng lưu ý những ListenableFuture này không cho bạn biết thao tác thành công hay không; chỉ cho biết việc đã hoàn tất. Bạn vẫn cần phải kết nối các phương thức WorkManager để tìm hiểu thông tin này.
    • Chúng tôi bỏ qua các lệnh gọi cancel() trên các đối tượng này, vì dễ gây nhầm lẫn và khó giải thích (bạn đang huỷ hành động hay công việc được thực hiện?). Điều này nằm trong hợp đồng Future.
    • Để duy trì sự đồng nhất với các phương thức getStatus* đồng bộ, chúng tôi đã cung cấp các biến thể ListenableFuture và đổi tên các biến thể hiện có đã trả lại LiveData để có "LiveData" một cách rõ ràng dưới dạng một phần của tên (chẳng hạn như getStatusesByIdLiveData(UUID) ). Đây là một thay đổi về API có thể gây lỗi.

Sửa lỗi

  • Khắc phục một vấn đề đã được nhận biết từ phiên bản alpha09 về các tệp androidx-annotations.pro trùng lặp. Bạn có thể xoá phương án giải quyết khỏi ghi chú phát hành trước đây bằng cách xoá exclude 'META-INF/proguard/androidx-annotations.pro' khỏi tệp gradle của mình.
  • Thêm các cấu hình ProGuard để giữ lại hàm khởi tạo Worker mới. b/116296569
  • Khắc phục NullPointerException có khả năng xảy ra trong một tình huống tương tranh mà công việc bị REPLACE. b/116253486b/116677275
  • WorkContinuation.combine() hiện chấp nhận một hoặc nhiều WorkContinuation thay vì hai hoặc nhiều. b/117266752

Thay đổi về API có thể gây lỗi

  • Xoá mọi phương thức và lớp deprecated trước đây, đặc biệt là hàm khởi tạo Worker mặc định.
  • Giao diện WorkerFactory và cách triển khai cụ thể DefaultWorkerFactory đã được hợp nhất với một lớp trừu tượng có tên là WorkerFactory.
  • Xoá WorkManager.synchronous()WorkContinuation.synchronous().
  • Các phương thức WorkManager.getStatus*() nay trả về ListenableFuture. WorkManager.getStatus*LiveData() trả về các LiveData.

Phiên bản 1.0.0-alpha09

Ngày 19 tháng 9 năm 2018

Vấn đề đã biết

Nếu bạn gặp phải vấn đề sau: "More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'" (Đã tìm thấy nhiều tệp bằng đường dẫn độc lập của hệ điều hành 'META-INF/proguard/androidx-annotations.pro'), vui lòng đưa giải pháp dưới đây vào tệp gradle như một giải pháp tạm thời trong khi chúng tôi sửa lỗi trong alpha10:

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

Sửa lỗi

  • Thêm một bản sửa lỗi khác cần thiết đối với lỗi "100 công việc". b/115560696
  • Đã bổ sung một số phần sửa lỗi đối với các lỗi ràng buộc về khoá ngoại (foreign key constraint errors) gây ra bởi tình trạng tương tranh (race condition). b/114705286
  • Đã uỷ quyền các lệnh gọi ConstraintTrackingWorker.onStopped(boolean) tới Worker cơ bản. b/114125093
  • Thực hiện thời gian trì hoãn tối thiểu chính xác cho Firebase JobDispatcher. b/113304626
  • Cải tiến việc đảm bảo phân luồng nội bộ đối với thư viện.
  • Khắc phục vấn đề tiềm ẩn khi loại bỏ LiveData nội bộ.

Các thay đổi về API

  • Bạn hiện có thể tạo phiên bản Worker của riêng mình trong thời gian chạy bằng cách chỉ định WorkerFactory trong WorkManager.Configuration. Trạng thái ban đầu dự phòng là DefaultWorkerFactory, khớp với hành vi của các phiên bản WorkManager trước đây.
    • Hàm khởi tạo mặc định cho WorkerNonBlockingWorker hiện được đánh dấu là không dùng nữa. Vui lòng sử dụng hàm khởi tạo mới (Worker(Context, WorkerParameters)) và gọi super(Context, WorkerParameters); các phiên bản tương lai của WorkManager sẽ xoá hàm khởi tạo mặc định.
  • Chúng tôi đã bắt đầu sử dụng cấu phần phần mềm ListenableFuture mới trong nội bộ (không có phần phụ thuộc Guava). Chúng tôi sẽ giới thiệu ListenableFutures với API trong các bản phát hành sắp tới. Thay đổi này sẽ hỗ trợ hiển thị sự kiện sau cùng của NonBlockingWorker.
  • Thêm khả năng kích hoạt công việc được tính giờ trong TestDriver thông qua TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID). b/113360060

Thay đổi có thể gây lỗi

  • Ngừng sử dụng hàm khởi tạo WorkerNonBlockingWorker mặc định. Vui lòng chuyển sang hàm khởi tạo mới sớm nhất có thể. Các phiên bản trong tương lai sẽ xoá hàm khởi tạo mặc định.

Phiên bản 1.0.0-alpha08

Ngày 27 tháng 8 năm 2018

Sửa lỗi

  • Các thành phần WorkManager được gắn nhãn rõ ràng là khởi động trực tiếp mà không hề hay biết để chúng không kích hoạt trong khi khởi động trực tiếp. Trong tương lai, chúng tôi sẽ cung cấp một phiên bản WorkManager mà người dùng có thể khởi động trực tiếp. b/112665532
  • Sửa lỗi công việc được thử lại không chạy. b/112604021
  • Khắc phục lỗi công việc định kỳ không được thực thi lặp lại (liên quan đến vấn đề trên). b/112859683
  • Ghi nhớ các chính sách giảm giá khi quy trình ứng dụng đang chạy.
  • Sửa các thông báo ngoại lệ trong Data để chỉ ra giới hạn là 10 KB.
  • Giảm giá trị tối đa của Configuration.setMaxSchedulerLimit(int) xuống còn 50 để tính đến độ trễ trong quá trình hoàn tất xử lý JobScheduler. b/112817355

Phiên bản 1.0.0-alpha07

Ngày 16 tháng 8 năm 2018

Sửa lỗi

  • Khắc phục một truy vấn SQL có thể có giới hạn âm và có thể trả về một số lượng kết quả không liên kết.
  • Công việc đã hoàn tất thực thi hiện đang huỷ một cách chính xác mọi bản sao đang chờ xử lý của chính công việc đó trong các Trình lập lịch biểu khác. Điều này đã dẫn đến việc vượt quá giới hạn JobScheduler việc làm. b/111569265
  • Sửa một ConcurrentModificationException trong ConstraintTracker. b/112272753
  • Thay đổi các chú thích kiểu trả về của Data.getBooleanArray(String)Data.getIntArray(String) thành @Nullable thay vì @NonNull. b/112275229

Các thay đổi về API

  • Worker hiện mở rộng một lớp mới là NonBlockingWorker. Điều này không ảnh hưởng đến mọi hoạt động sử dụng hiện tại. Trong tương lai, NonBlockingWorker sẽ trở thành một thực thể được hỗ trợ đầy đủ dành cho các giải pháp phân luồng tuỳ chỉnh.
  • Thay đổi các chú thích kiểu trả về của Data.getBooleanArray(String)Data.getIntArray(String) thành @Nullable thay vì @NonNull. b/112275229
  • Các phần mở rộng Kotlin: ngừng sử dụng Map.toWorkData() và thêm workDataOf(vararg Pair<String, Any?>) cấp cao nhất để nhất quán hơn với các API hiện có.

Phiên bản 1.0.0-alpha06

Ngày 1 tháng 8 năm 2018

Sửa lỗi

  • Ngăn chặn việc khoá cơ sở dữ liệu khi lên lịch công việc. b/111801342
  • Sửa lỗi khiến PeriodicWork không chạy được theo lịch khi ở Chế độ nghỉ (Doze). b/111469837
  • Khắc phục một tình huống tương tranh khi theo dõi các quy tắc ràng buộc khiến WorkManager gặp sự cố. googleclassrooms/android-workmanager/issues/56
  • Tạo WorkRequest duy nhất khi sử dụng WorkRequest.Builder#build(). b/111408337
  • Chỉ cho phép sử dụng RescheduleReceiver khi có các WorkRequest cần dùng. b/111765853

Phiên bản 1.0.0-alpha05

Ngày 24 tháng 7 năm 2018

Các thay đổi về API

  • WorkManager.getInstance() nay được chú thích bằng @NonNull thay vì @Nullable. Thay vào đó, nếu singleton không được khởi chạy đúng cách trong trường hợp khởi chạy thủ công, phương thức này sẽ gửi một IllegalStateException. Đây là một thay đổi về API có thể gây lỗi.
  • Thêm một API mới, Configuration.Builder.setMinimumLoggingLevel(int), có thể kiểm soát độ chi tiết của WorkManager. Theo mặc định, WorkManager ghi nhật ký Log.INFO trở lên.
  • Thay đổi chữ ký của Data.getString() để không sử dụng giá trị mặc định nữa (giá trị mặc định này được ngầm hiểu là null). Đây là một thay đổi về API có thể gây lỗi.
  • Đánh dấu một số phương thức chỉ cần thiết để sử dụng nội bộ là @hide. Bao gồm hàm khởi tạo Constraints, Data.toByteArray()Data.fromByteArray(byte[]). Đây là một thay đổi về API có thể gây lỗi.

Sửa lỗi

  • WorkManager không còn thực thi công việc trong trường hợp đã biết là tự động sao lưu. Việc này có thể đã dẫn đến sự cố. b/110564377
  • Sửa lỗi lên lịch kép (double-scheduling) các PeriodicWorkRequest khi sử dụng JobScheduler. b/110798652
  • Khắc phục vấn đề PeriodicWorkRequest không thực thi chính xác sau khi thiết bị nghỉ ngơi (doze). b/111469837
  • Khắc phục vấn đề về độ trễ ban đầu khi sử dụng Firebase JobDispatcher. b/111141023
  • Khắc phục một số vấn đề có thể xảy ra liên quan đến thời gian và điều kiện tương tranh.
  • Giải phóng đúng cách các BroadcastReceiver không còn cần thiết.
  • Tối ưu hoá hiệu quả lập lịch biểu lại khi ứng dụng khởi động lại sau khi bị buộc đóng.
  • Cho phép gọi TestScheduler.setAllConstraintsMet(UUID) trước hoặc sau khi xếp hàng WorkRequest nhất định. b/111238024

Thay đổi có thể gây lỗi

  • WorkManager.getInstance() nay được chú thích bằng @NonNull thay vì @Nullable.
  • Thay đổi chữ ký của Data.getString() để không sử dụng giá trị mặc định nữa (giá trị mặc định này được ngầm hiểu là null).
  • Đánh dấu một số phương thức chỉ cần thiết để sử dụng nội bộ là @hide. Bao gồm hàm khởi tạo Constraints, Data.toByteArray()Data.fromByteArray(byte[]).

Phiên bản 1.0.0-alpha04

Ngày 26 tháng 6 năm 2018

Sửa lỗi

  • PeriodicWorkRequest đã được lên lịch lại chính xác khi sử dụng phương thức triển khai dựa trên AlarmManager.
  • Sửa lỗi ANR có thể xảy ra khi lên lịch lại cho tất cả trình thực thi sau khi buộc dừng hoặc khởi động lại. b/110507716
  • Thêm các chú thích thuộc tính rỗng vào nhiều API WorkManager. b/110344065
  • Ghi các trường hợp ngoại lệ chưa nắm bắt được xảy ra trong quá trình thực hiện trình thực thi. b/109900862
  • Cho phép di chuyển cơ sở dữ liệu phá hoại trong trường hợp bạn quyết định khôi phục phiên bản WorkManager cũ. b/74633270
  • Khắc phục sự cố di chuyển nếu bạn tạo thẻ ẩn trùng lặp. Đây là một vấn đề rất hiếm khi xảy ra nếu bạn đã tự sử dụng cùng một định dạng thẻ ngầm ẩn.

Phiên bản 1.0.0-alpha03

Ngày 19 tháng 6 năm 2018

Sửa lỗi

  • Khắc phục một điều kiện tương tranh (race condition) trong phương thức triển khai dựa trên AlarmManager. b/80346526.

  • Khắc phục sự cố trùng lặp khi sử dụng JobScheduler sau khi khởi động lại thiết bị.

  • Việc làm có kích hoạt URI nội dung giờ đây vẫn tồn tại sau mỗi lần khởi động lại. b/80234744

  • Các lần cập nhật tài liệu. b/109827628, b/109758949, b/80230748

  • Khắc phục sự cố khi sắp xếp lại một WorkRequest. b/109572353.

  • Khắc phục các cảnh báo của trình biên dịch Kotlin khi sử dụng phần phụ thuộc work-runtime-ktx.

  • WorkManager hiện sử dụng Room phiên bản 1.1.1-rc1.

Các thay đổi về API

  • Thêm getStatusesSync(), phiên bản đồng bộ hoá của WorkContinuation.getStatuses().
  • Worker có khả năng phân biệt giữa quá trình huỷ do người dùng thực hiện và tạm thời huỷ theo yêu cầu của hệ điều hành. Worker.isStopped() trả về true nếu có yêu cầu ngừng bất kỳ loại yêu cầu nào. Worker.isCancelled() trả về true khi công việc đã bị huỷ bỏ một cách rõ ràng. b/79632247
  • Thêm tuỳ chọn hỗ trợ cho jobParameters#getNetwork() trên API 28. Thông tin này được tiết lộ qua Worker.getNetwork().
  • Thêm Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) để bạn có thể kiểm soát số lượng lệnh được gửi đến JobScheduler hoặc AlarmManager. Điều này giúp ngăn WorkManager sử dụng tất cả JobScheduler còn trống của bạn.
  • Thêm Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) giúp khai báo một loạt JobScheduler ID công việc một cách an toàn để cho WorkManager có thể sử dụng. b/79996760
  • Worker.getRunAttemptCount() trả về số lần chạy hiện tại cho một Worker nhất định. b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) cho phép bạn thêm một PeriodicWorkRequest duy nhất vào hàng đợi. b/79600647
  • WorkManager.cancelAllWork() huỷ bỏ tất cả Worker. Các thư viện phụ thuộc vào WorkManager có thể truy vấn thời điểm phương thức này được gọi lần cuối bằng cách sử dụng WorkManager.getLastCancelAllTimeMillis() để xoá thêm trạng thái nội bộ.
  • Thêm WorkManager.pruneWork() để xoá các công việc đã hoàn thành khỏi cơ sở dữ liệu nội bộ. b/79950952, b/109710758

Các thay đổi về hành vi

  • Thêm một thẻ ngầm ẩn cho tất cả WorkRequest, thẻ này cũng đủ điều kiện để trở thành tên lớp của Worker. Điều này cho phép xoá các WorkRequest không có các tag hoặc khi id không có sẵn. b/109572351

Thay đổi có thể gây lỗi

  • Đổi tên Worker.WorkerResult thành Worker.Result.
  • Worker.onStopped hiện có một tham số isCancelled bổ sung được đặt thành true khi Worker bị huỷ một cách rõ ràng.

Phiên bản 1.0.0-alpha02

Ngày 24 tháng 5 năm 2018

Sửa lỗi

  • Sửa một NullPointerException trên State.isFinished(). b/79550068
  • Sửa lỗi khiến các Worker được lên lịch lại trên Application.onCreate(). b/79660657
  • Sửa lỗi khiến bạn có thể lên lịch công việc nhiều hơn mức mà hệ điều hành cho phép. b/79497378
  • Chuyển việc dọn dẹp các khoá chế độ thức (wake lock) được liên kết với các Worker sang luồng nền.
  • Quá trình triển khai AlarmManager hiện xoá đúng cách khi tất cả công việc đang chờ xử lý hoàn tất.
  • Khắc phục bằng cách dọn dẹp các truy vấn SQL ảnh hưởng đến các ngôn ngữ không phải tiếng Anh. b/80065360
  • Thêm tính năng hỗ trợ cho các float trong Data. b/79443878
  • Data.Builder.putAll() hiện trả về một thực thể của Builder. b/79699162
  • Hiển thị thêm Javadoc và bản sửa lỗi trong tài liệu. b/79691663

Các thay đổi về API

  • Worker có thể phản ứng với việc bị chặn. Bạn có thể sử dụng Worker.isStopped() để kiểm tra xem Worker đã bị ngừng hay chưa. Có thể dùng Worker.onStopped() để thực hiện các thao tác dọn dẹp nhẹ.
  • API Worker.getTags() trả về một Set thẻ được liên kết với Worker.
  • Thêm các phương thức nạp chồng (overload) javax.time.Duration cho các API, kết hợp giữa thời lượng và TimeUnit. Trình bảo vệ: @RequiresApi(26).
  • Các phần mở rộng WorkManager đã chuyển từ gói androidx.work.ktx sang gói androix.work. Các phần mở rộng cũ sẽ không còn được sử dụng nữa và sẽ bị xoá trong các phiên bản sắp tới.
  • Ngừng sử dụng Configuration.withExecutor(). Sử dụng Configuration.setExecutor() thay thế.

Phiên bản 1.0.0-alpha01

Ngày 8 tháng 5 năm 2018

WorkManager đơn giản hoá việc lập lịch và thực thi công việc trong nền với sự đảm bảo và khả năng nhận biết quy tắc ràng buộc. Bản phát hành đầu tiên này là 1.0.0-alpha01.