WorkManager

WorkManager API 可讓您輕鬆排定工作時間,以可靠的方式執行可延後的非同步工作。這些 API 可讓您建立工作,並在達到工作限制條件時,交給 WorkManager 執行。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2024 年 10 月 30 日 2.9.1 - - -

宣告依附元件

如要新增 WorkManager 的依附元件,您必須在專案中新增 Google Maven 存放區

在應用程式或模組的 build.gradle 檔案中,新增您需要的構件依附元件:

Groovy

dependencies {
    def work_version = "2.9.1"

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

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

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin

dependencies {
    val work_version = "2.9.1"

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

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

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

    // optional - GCMNetworkManager support
    implementation("androidx.work:work-gcm:$work_version")

    // optional - Test helpers
    androidTestImplementation("androidx.work:work-testing:$work_version")

    // optional - Multiprocess support
    implementation("androidx.work:work-multiprocess:$work_version")
}

如要進一步瞭解如何使用 Kotlin 擴充功能,請參閱 ktx 說明文件

如要進一步瞭解依附元件,請參閱「新增建構依附元件」。

意見回饋

您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件

2.10 版

2.10.0 版

2024 年 10 月 30 日

發布 androidx.work:work-*:2.10.0。2.10.0 版包含這些修訂版本

自 2.9.1 版以來的重要變更

  • WorkManager 為工作新增追蹤標記,這樣一來,系統就會包含執行中的 Worker 名稱,讓「adb shell dumpsys jobscheduler」更容易理解。我們也會在 WorkManager 的關鍵區域周圍新增追蹤區段。
  • Configuration.workerCoroutineContext 已新增用於控管執行 CoroutineWorker 的調度器。
  • 開發人員可以透過 Constraints.setRequiredNetworkRequest 方法,將 NetworkRequest 指定為 worker 的限制條件。這樣就能更精細地控管 worker 應執行的網路。
  • WorkManager 2.10.0 現已使用 SDK 35 編譯,並包含各種 SDK 35 相容性變更。

2.10.0-rc01 版

2024 年 10 月 24 日

發布 androidx.work:work-*:2.10.0-rc01。2.10.0-rc01 版包含這些修訂版本

2.10.0-beta01 版

2024 年 10 月 2 日

發布 androidx.work:work-*:2.10.0-beta01。2.10.0-beta01 版包含這些修訂版本

2.10.0-alpha04 版

2024 年 9 月 18 日

發布 androidx.work:work-*:2.10.0-alpha04。2.10.0-alpha04 版包含這些修訂項目

API 變更

  • 當前景工作站因執行逾時而停止,請根據前景服務類型新增停止原因 STOP_REASON_FOREGROUND_SERVICE_TIMEOUT。(Ibd0af)。

2.10.0-alpha03 版

2024 年 9 月 4 日

發布 androidx.work:work-*:2.10.0-alpha03。2.10.0-alpha03 版包含這些修訂版本

新功能

  • WorkManager 為工作新增追蹤標記,這樣一來,系統就會包含執行中的 Worker 名稱,讓「adb shell dumpsys jobscheduler」更容易理解。我們也會在 WorkManager 的關鍵區域周圍新增追蹤區段。

API 變更

  • WorkManager 2.10.0 現已使用 SDK 35 進行編譯。
  • 修正「短時間服務」和「資料同步」類型前景工作者逾時,並在 WorkManager 未呼叫 stopSelf() 時導致 ANR 的問題。這項修正僅適用於導入前景服務類型 API 34 和 35 的裝置。(ca06b2b/364508145)。
  • 新的 WorkerParameters API,可在使用 WorkerFactory 時切換 Worker 繫結的遠端程序。(Ibdc8aIe8a90I7373f)。

修正錯誤

  • 修正 WorkManager 在工作的前景類型擁有已撤銷的 Android 14 必備權限時,嘗試重新啟動長時間執行的 worker (即前景工作站) 所造成的當機問題。(b/333957914)
  • 移除新平台 API 存取權的手動設定,因為在使用 AGP 7.3 以上版本 (例如 R8 3.3 版) 的 R8 時,以及在使用 AGP 8.1 以上版本 (例如 D8 8.1 版) 的所有版本時,系統會透過 API 模擬功能自動執行此操作。建議未使用 AGP 的用戶端更新至 D8 8.1 以上版本。詳情請參閱這篇文章。(Ia60e0b/345472586)。

2.10.0-alpha02 版

2024 年 4 月 17 日

發布 androidx.work:work-*:2.10.0-alpha02。2.10.0-alpha02 版包含這些修訂版本

API 變更

  • 新增透過 WorkManager 中可設定的 @RestrictTo Tracer 發出追蹤記錄時距的功能。(I17d7fb/260214125)。
  • Configuration.workerCoroutineContext 已新增用於控管執行 CoroutineWorker 的調度器。這有助於完全避免在 WorkManager 中使用 Dispatchers.Default。(Icd1b7)。
  • 為 Worker 新增自訂例外狀況處理常式 (Ib1b74b/261190695)
  • OneTimeWorkRequest.BuilderPeriodicWorkRequest.Builder 現在可以使用 KClass 建構,而非 Classval request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build() (Ib55f6)
  • WorkManager 類別已遷移至 Kotlin。傳回 LiveDataListenableFutureFlow 的方法現在會提供正確的是否可為空值資訊。如果程式碼中的可空值假設不正確,可能需要變更用戶端的原始碼。(If6757)。

2.10.0-alpha01 版

2024 年 1 月 24 日

發布 androidx.work:work-*:2.10.0-alpha012.10.0-alpha01 版本包含這些修訂項目。

新功能

  • 開發人員可以透過 Constraints.setRequiredNetworkRequest 方法,將 NetworkRequest 指定為 worker 限制。這樣就能更精細地控管 worker 應執行的網路。

API 變更

  • 新增可將 NetworkRequest 指定為限制條件的功能。(Id98a1b/280634452)。

2.9 版

2.9.1 版

2024 年 8 月 7 日

發布 androidx.work:work-*:2.9.1。2.9.1 版包含這些修訂項目

修正錯誤

  • 修正當前景類型的工作有 Android 14 必要條件權限遭到撤銷時,WorkManager 嘗試重新啟動長時間執行的工作站 (即前景工作站) 而導致的異常終止問題。(b/333957914)

2.9.0 版

2023 年 11 月 29 日

發布 androidx.work:work-*:2.9.02.9.0 版包含此連結所列的修訂項目。

自 2.8.0 版以來的重要異動

  • 透過 Flow 進行觀測。除了 LiveData,現在也可以透過 WorkManager.getWorkInfosFlow 和類似方法,透過 Flow 觀察 Worker 的進度。
  • 現在 WorkManager 會提供先前停止 worker 的提示。您可以透過 getStopReason() 方法,從 worker 本身或透過 getStopReason()WorkInfo 進行查詢。
  • 透過 setNextScheduleTimeOverride 精確排定定期工作。這樣一來,系統就能動態計算下一個定期工作時間表,並用於實作進階功能,例如自適應重新整理時間、自訂重試行為,或是在使用者每天早上起床前,讓新聞動態工作者執行作業,不必擔心時間會有所誤差。ExistingPeriodicWorkPolicy.UPDATE 應搭配這些技巧使用,以免在排定下一個 worker 時取消目前執行中的 worker。
  • WorkManager 的測試,使用與實際環境相符的執行緒。ExecutorsMode.PRESERVE_EXECUTORS 可用於 initializeTestWorkManager,以保留在 Configuration 中設定的執行緒,並使用實際的主執行緒。
  • CoroutineWorker 等協同程式 API 已從額外構件工作-執行階段-ktx 移至主要構件工作-執行階段。work-runtime-ktx 目前為空白。

API 變更

  • 已將 stopReason 新增至 WorkInfo。這會在 worker 執行後提供 stopReason。這可能有助於以可用的方式回報 stopReason,因為一旦 worker 停止運作,應用程式本身可能會很快遭到終止。(I21386)。
  • 允許透過設定設定 Clock,並用於驅動 Worker 測試的執行順序。(Ic586e)
  • getStopReason() 方法已新增至 ListenableWorker,可提供工作站停止的原因。(I07060)。
  • 新增了 WorkManagerTestInitHelper#closeWorkDatabase(),避免針對 Closeguard 針對資源外洩的警告。(Ia8d49)
  • WorkInfo 的建構函式現已公開,這有助於測試。(Ia00b6b/209145335)。
  • work-runtime-ktx 現已空白,CoroutineWorker 和其他 Kotlin 專屬公用程式現在可在主要工作執行階段構件中使用。(I71a9a)。
  • 新增 setNextScheduleTimeOverride 方法,可準確設定定期工作排程 (I3b4da)
  • 新增 getNextScheduleTimeMillis 以取得排定執行時間資訊,並新增至 WorkInfo。(I797e4)。
  • 初始延遲時間和週期性資訊會新增至 WorkInfo。(I52f2f)。
  • 透過 getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow 方法,新增透過流程觀察 worker 的方法 (If122a)
  • Constraints 的建構函式和屬性中新增缺少的 @RequiresApi(...) 註解。這些註解現在已與 WorkManager 早期版本中 Constraints.Builder 中 setter 的對應註解保持一致。(I6d7d2)
  • WorkManager 現在針對內容 URI 工作站設有獨立限制,可確保工作站在 JobScheduler 中獲得可用位置,避免在高負載下遺漏內容更新。您可以透過 Configuration.Builder.setContentUriTriggerWorkersLimit 設定限制。(Ic128f)。
  • 限制條件已新增至 WorkInfo。(I162c0)。

2.9.0-rc01 版

2023 年 10 月 18 日

發布 androidx.work:work-*:2.9.0-rc012.9.0-rc01 版包含以下修訂項目。

  • 自上次 Beta 版發布以來沒有任何變更

2.9.0-beta01 版

2023 年 9 月 6 日

發布 androidx.work:work-*:2.9.0-beta01查看 2.9.0-beta01 版的修訂項

API 變更

2.9.0-alpha02 版本

2023 年 7 月 26 日

發布 androidx.work:work-*:2.9.0-alpha02查看 2.9.0-alpha02 版的修訂項

新功能

  • 現在 WorkManager 會提供先前停止 worker 的提示。您可以透過 getStopReason() 方法從 worker 本身查詢,也可以透過 getStopReason()WorkInfo 查詢。

API 變更

  • 已將 stopReason 新增至 WorkInfo。在 worker 執行後提供 stopReason。這可能有助於以可用的方式回報 stopReason,因為一旦 worker 停止運作,應用程式本身可能會很快遭到終止。(I21386)。
  • 允許透過設定設定時鐘,並用於驅動 Worker 測試的執行順序。(Ic586e)。
  • getStopReason() 方法已新增至 ListenableWorker,可提供工作站停止的原因。(I07060)。
  • 新增 WorkManagerTestInitHelper#closeWorkDatabase(),避免 Closeguard 發出資源外洩警告。(Ia8d49)。

修正錯誤

  • 新增使用 TestDriver 略過 overrideNextScheduleTime 的功能,並修正可測試性問題。(Ic2905)。

2.9.0-alpha01 版

2023 年 6 月 7 日

發布 androidx.work:work-*:2.9.0-alpha012.9.0-alpha01 版包含此連結所列的修訂項目。

新功能

  • 透過 Flow 進行觀測。除了 LiveData,現在也可以透過 WorkManager.getWorkInfosFlow 和類似方法,透過 Flow 觀察 Worker 的進度。
  • 透過 setNextScheduleTimeOverride 精確排定定期工作。這樣一來,系統就能動態計算下一個定期工作時間表,並用於實作進階功能,例如自適應重新整理時間、自訂重試行為,或是在使用者每天早上起床前,讓新聞動態工作者執行作業,不必擔心時間會有所誤差。ExistingPeriodicWorkPolicy.UPDATE 應搭配這些技巧使用,以免在排定下一個 worker 時取消目前執行中的 worker。
  • WorkManager 使用與正式版相符的執行緒進行測試。ExecutorsMode.PRESERVE_EXECUTORS 可用於保留在 Configuration 中設定的執行緒,並使用真正的主執行緒。
  • CoroutineWorker 等協同程式 API 已從額外構件 work-runtime-ktx 移至主要構件 work-runtimework-runtime-ktx 目前為空白。

API 變更

  • WorkInfo 的建構函式現已設為公開,這在測試時相當實用。(Ia00b6b/209145335)。
  • work-runtime-ktx 現已空白,CoroutineWorker 和其他 Kotlin 專屬公用程式現在可在主要 work-runtime 構件中使用。(I71a9a)。
  • 新增 setNextScheduleTimeOverride 方法,可準確設定定期工作排程 (I3b4da)
  • getEarliestRunTimeMillis 已重新命名為 getNextScheduleTimeMillis。(I2bd7a)。
  • 下次排定執行時間資訊會新增至 WorkInfo。(I797e4)。
  • 初始延遲時間和週期性資訊會新增至 WorkInfo。(I52f2f)。
  • 透過 getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow 方法,新增透過流程觀察 worker 的方法 (If122a)
  • 在 Constraints 的建構函式和屬性中新增缺少的 @RequiresApi(...) 註解。這些註解現在已與 WorkManager 早期版本中 Constraints.Builder 中 setter 的對應註解保持一致。(I6d7d2)
  • WorkManager 現在針對內容 URI 工作站設有獨立限制,可確保工作站在 JobScheduler 中獲得可用位置,避免在高負載下遺漏內容更新。您可以透過 Configuration.Builder.setContentUriTriggerWorkersLimit 設定限制。(Ic128f)。
  • 限制條件已新增至 WorkInfo。(I162c0)

2.8 版本

2.8.1 版

2023 年 3 月 22 日

發布 androidx.work:work-*:2.8.12.8.1 版包含此連結所列的修訂項目。

修正錯誤

  • 修正 RescheduleReceiver 中的 ANR,該問題先前無法正確處理兩個同時廣播。(b/236906724)。

2.8.0 版

2023 年 2 月 8 日

發布 androidx.work:work-*:2.8.0查看 2.8.0 版的修訂項

自 2.7.0 版以來的重要異動

新功能

API 變更

  • 新增 WorkManager.updateWork,可在更新工作的同時保留原始佇列時間和鏈結 (I9a248b/219446409)。
  • 新增 ExistingPeriodicWorkPolicy.UPDATE。這項政策可讓您依據名稱更新週期性工作。這類似於現有的 REPLACE,但干擾程度較低:這項政策不會取消執行中的工作站,並可以保留佇列時間,初始延遲與期間將以原始佇列時間計算,而非更新時間。我們已淘汰 REPLACE,因 REPLACEUPDATE 名稱太過類似,可能會造成混淆。如果您仍想保留之前的 REPLACE 語意,可使用新加入的 CANCEL_AND_REENQUEUE,這和 REPLACE 功能相同 (I985edb/219446409)。
  • 新增功能:可透過 setSchedulingExceptionHandler 攔截提供 Consumer<Throwable> 的排程例外狀況。
  • 新增可透過 setInitializationExceptionHandler 提供 Consumer<Throwable> 的功能,在初始化 WorkManager 時可判斷是否發生問題。
  • OneTimeWorkRequestPeriodicWorkRequest 的內嵌輔助程式已從 androidx.work:work-runtime-ktx 移到 androidx.work:work-runtime (I0010fb/209145335)
  • 新增輔助方法 WorkQuery.fromIdsWorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags,以便直接建立 WorkQuery (b/199919736) (If48f2b/199919736)。
  • getForegroundInfo 新增至 Worker (Ic1ead)。
  • RxJava 2 和 RxJava 3 的 RxWorker 現在都具有會傳回 CompletablesetForeground,可取代會傳回 ListenableFuturesetForegroundInfoAsync
  • RxJava 2 和 RxJava 3 的 RxWorker 都具有會傳回 SinglegetForegroundInfo,可取代會傳回 ListenableFuturegetForegroundInfoAsync (b/203851459)。
  • 現在可以直接建構限制條件,不必使用 Constraints.Builder,這對 Kotlin 使用者來說相當便利 (Idc390b/137568653)。
  • 新增查看 WorkManager 是否已初始化的功能。此外,我們也為程式庫開發人員增設了新的 getConfiguration() API,方便他們取得初始化 WorkManager 所用的設定 (I6eff3b/212300336)。

修正錯誤

  • 修正貪婪排程器的問題,該問題會導致工作站在負載量不足的情況下,無法立即執行。(I9686bb/248111307)。
  • @RequiresPermission 新增至需要為 SDK 33 以上版本授予 POST_NOTIFICATIONS 權限的 API (Ie542eb/238790278)。
  • 使用 suspendCancellableCoroutine 時,傳送 CoroutineScope 的取消作業到 ListenableFuture

2.8.0-rc01 版

2022 年 12 月 7 日

發布 androidx.work:work-*:2.8.0-rc01查看 2.8.0-rc01 版的修訂項

新功能

  • 此版本無新功能,主要目的只是遞增版本編號

2.8.0-beta02 版

2022 年 11 月 9 日

發布 androidx.work:work-*:2.8.0-beta02查看 2.8.0-beta02 版的修訂項

修正錯誤

  • 修正了 WorkInfo 中的 equals 方法,先前未考慮新ㄧ代的資訊 (4977cc)。

2.8.0-beta01 版

2022 年 10 月 5 日

發布 androidx.work:work-*:2.8.0-beta01查看 2.8.0-beta01 版的修訂項

修正錯誤

  • 修正貪婪排程器的問題,該問題會導致工作站在負載量不足的情況下,無法立即執行。(I9686bb/248111307)。

2.8.0-alpha04 版

2022 年 9 月 7 日

發布 androidx.work:work-*:2.8.0-alpha04查看 2.8.0-alpha04 版的修訂項

API 變更

  • 新增了會傳回工作站世代版本的 WorkerInfo.getGeneration()WorkerParameters.getGeneration()。如果使用 ExistingPeriodicWorkPolicy.UPDATE 透過 WorkManager.updateWorkWorkManager.enqueueUniquePeriodicWork 更新工作站,工作站便會有多代版本。請注意,工作站目前正在執行時,如果在工作站執行期間發生更新,這個方法可能會從目前執行的工作站傳回較新的世代版本。(I665c5b/219446409) (I128a9b/219446409)。
  • 已新增 InitializationExceptionHandler 例外狀況處理常式,可用於判斷嘗試初始化 WorkManager 時是否發生問題 (I061de)。

2.8.0-alpha03 版

2022 年 8 月 10 日

發布 androidx.work:work-*:2.8.0-alpha032.8.0-alpha03 版包含以下修訂項目。

新功能

  • 我們新增了能以非干擾方式更新 WorkRequests 的功能,能夠保留原始佇列時間、鏈結等項目。詳情請看 WorkManager.updateWorkExistingPeriodicWorkPolicy.UPDATE

API 變更

  • 新增 WorkManager.updateWork,可在更新工作的同時保留原始佇列時間和鏈結 (I9a248b/219446409)。
  • 新增 ExistingPeriodicWorkPolicy.UPDATE。這項政策可以讓您依據名稱來更新週期性工作。這和目前已有的 REPLACE 十分相似,但干擾程度較低:這個政策不會取消執行中的工作站,並可以保留佇列時間,初始延遲與期間將以原始佇列時間計算,而非更新時間,我們已淘汰 REPLACE,以便防止 REPLACEUPDATE 由於名稱太過類似而造成混淆。如果您依然想保留之前的 REPLACE 語意,不妨使用新加入的 CANCEL_AND_REENQUEUE,這和 REPLACE 功能相同 (I985edb/219446409)。
  • 新增可藉由定義 SchedulingExceptionHandler 攔截排程例外狀況的功能 (I033eb)。
  • OneTimeWorkRequestPeriodicWorkRequest 的內嵌輔助程式已從 androidx.work:work-runtime-ktx 移到 androidx.work:work-runtime (I0010fb/209145335)

修正錯誤

  • @RequiresPermission 新增至需要為 SDK 33 以上版本授予 POST_NOTIFICATIONS 權限的 API。(Ie542eb/238790278)。

2.8.0-alpha02 版

2022 年 4 月 6 日

發布 androidx.work:work-*:2.8.0-alpha02查看 2.8.0-alpha02 版的修訂項

API 變更

  • 現在可以直接建構限制條件,而不必使用建構工具,對 Kotlin 使用者來說相當便利 (Idc390b/137568653)。
  • 新增查看 WorkManager 是否已初始化的功能。此外,我們也為程式庫開發人員增設了新的 getConfiguration() API,方便他們取得初始化 WorkManager 所用的設定 (I6eff3b/212300336)。

2.8.0-alpha01 版

2022 年 1 月 12 日

發布 androidx.work:work-*:2.8.0-alpha01查看 2.8.0-alpha01 版的修訂項

API 變更

  • 已新增輔助方法 WorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags,以便直接建立 WorkQuery (If48f2b/199919736)。
  • 為未來的 SDK 新增實驗性 BuildCompat 方法 (Iafd82b/207528937)
  • 新增 getForegroundInfoWorker (Ic1ead)。
  • 已新增輔助程式 WorkQuery.fromIds,以便直接透過 ID 建立 WorkQuery (Ie5bdfb/199919736)。
  • RxWorker 現在可使用回傳 CompletablesetForeground,取代回傳 ListenableFuturesetForegroundInfoAsync (I85156)。
  • RxJava 2 的 RxWorker 現在可使用回傳 SinglegetForegroundInfo,取代回傳 ListenableFuturegetForegroundInfoAsync (I21c91b/203851459)。
  • RxJava 3 的 RxWorker 現在可使用回傳 SinglegetForegroundInfo,取代回傳 ListenableFuturegetForegroundInfoAsync (I1ca8a)。
  • RxWorker 現在可使用回傳 CompletablesetForeground,取代回傳 ListenableFuturesetForegroundInfoAsync (I992a3b/203851459)。

修正錯誤

  • 使用 suspendCancellableCoroutine 時,取消 CoroutineScopeListenableFuture 的取消作業 (I77e63)。

2.7 版

2.7.1 版

2021 年 11 月 17 日

發布 androidx.work:work-*:2.7.1查看 2.7.1 版的修訂項

修正錯誤

  • 使用 suspendCancellableCoroutine 時,CoroutineScope 的取消作業會套用到 ListenableFuture (I77e63)。
  • 一旦延遲工作要求標示為密集,系統就會立即擲回例外狀況。bef1762

2.7.0 版

2021 年 10 月 13 日

發布 androidx.work:work-*:2.7.0查看 2.7.0 版的修訂項

自 2.6.0 版以來的重要變更

  • WorkManager 推出了新的 WorkRequest.Builder.setExpedited(...) API,可協助處理 Android 12 中的前景服務限制。

  • 使用 setExpedited(...) 時,WorkManager 會於 Android 12 以上版本,將工作委派給 JobScheduler 中的加速工作,同時委派給前景服務,為先前的 Android 版提供回溯相容性。

2.7.0-rc01 版

2021 年 9 月 29 日

發布 androidx.work:work-*:2.7.0-rc01查看 2.7.0-rc01 版的修訂項

這個版本與 androidx.work:work-*:2.7.0-beta01 相同。

2.7.0-beta01 版

2021 年 9 月 1 日

發布 androidx.work:work-*:2.7.0-beta01查看 2.7.0-beta01 版的修訂項

新功能

  • 初始化 WorkManager 時,減少多程序 SQLite 爭用情況。

API 變更

  • 由於 Android 12 (S) 的基礎平台 API 穩定,請移除 @ExperimentalExpeditedWork API (aosp/1792806)。

修正錯誤

  • 針對未採用 getForegroundInfoAsync() 的加速工作者提供更明確的錯誤訊息 (aosp/1809376)。

2.7.0-alpha05 版

2021 年 7 月 21 日

發布 androidx.work:work-*:2.7.0-alpha05查看 2.7.0-alpha05 版的修訂項

這個版也包含 WorkManager 2.6.0-beta02 版的錯誤修正項目。

2.7.0-alpha04 版

2021 年 6 月 2 日

發布 androidx.work:work-*:2.7.0-alpha04

這個版還包含 2.6.0-beta01 版的變更內容。

API 變更

  • ListenableWorker.setForegroundAsync() 已淘汰,
  • 我們建議盡量使用 WorkRequest.Builder.setExpedited(...) API。為了更妥善地因應應用程式不受前景服務限制規範的情況,開發人員可以使用 ListenableWorker.setForegroundAsync() API。
  • 如果呼叫 ListenableWorker.setForegroundAsync(),則應用程式適用前景服務限制時,就會觸發 ForegroundServiceStartNotAllowedException

修正錯誤

  • 將加速工作重新安排後,這些工作就不會再加速。而會成為「一般」工作。

2.7.0-alpha03 版

2021 年 4 月 21 日

發布 androidx.work:work-*:2.7.0-alpha03查看 2.7.0-alpha03 版的修訂項

新功能

API 變更

2.7.0-alpha02 版

2021 年 3 月 10 日

發布 androidx.work:work-*:2.7.0-alpha02查看 2.7.0-alpha02 版的修訂項

修正錯誤

  • 明確設定 PendingIntent 的可變動性,以修正指定 Android 12 時發生的當機問題。(b/180884673)

2.7.0-alpha01 版

2021 年 2 月 18 日

發布 androidx.work:work-*:2.7.0-alpha01查看 2.7.0-alpha01 版的修訂項

新功能

  • WorkManager 推出全新的 WorkRequest.Builder.setExpedited(...) API,將 Android 12 的前景服務限制納入考量。

    應用程式在背景執行時,無法再啟動前景服務。因此,為了更妥善地支援先前與前景服務生命週期繫結的長期執行工作,應用程式可以將 WorkRequest 標示為「expedited」(加急處理)。

    這個 API 會取代 setForegroundAsync(...) / setForeground(...) API (現已淘汰)。

    使用 setExpedited(...) 時,WorkManager 會委派 JobScheduler 的加速工作,從 Android 12 開始,同時將委派功能委派給前景服務,以便回溯相容於先前的 Android 版本,

API 變更

  • 支援加速 WorkRequest

2.6.0 版

2.6.0 版

2021 年 9 月 1 日

發布 androidx.work:work-*:2.6.0查看 2.6.0 版的修訂項

自 2.5.0 版以來的重要變更

  • WorkManager 會使用 androidx.startup 來初始化 WorkManager。 如果使用 tools:node="remove" 過去用來初始化 WorkManager 的 ContentProvider,您必須改為執行下列步驟。

    <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" />
    
  • 新增可支援任何程序的工作站。(Iaf200)

  • 已新增 RemoteCoroutineWorker,這是 RemoteListenableWorker 的實作,可繫結至遠端程序。(I30578)

2.6.0-rc01 版

2021 年 8 月 4 日

發布 androidx.work:work-*:2.6.0-rc01查看 2.6.0-rc01 版的修訂項

這個版與 androidx.work:work-*:2.6.0-beta02 相同。

2.6.0-beta02 版

2021 年 7 月 21 日

發布 androidx.work:work-*:2.6.0-beta02查看 2.6.0-beta02 版的修訂項

修正錯誤

  • RemoteWorkManager 現已與 RemoteWorkManagerService 解除繫結,以便 RemoteWorkManagerService 正確清理資料。aosp/1730694
  • RemoteListenableWorker 現已與 RemoteWorkerService 解除繫結,以便 RemoteWorkerService 正確清理資料。aosp/1743817
  • ForceStopRunnable 現在只能在主要應用程式處理程序中執行。這是一個最佳化程序,可避免使用多個程序的應用程式資源爭用。aosp/1749180aosp/1761729

2.6.0-beta01 版

2021 年 6 月 2 日

發布 androidx.work:work-*:2.6.0-beta01查看 2.6.0-beta01 版的修訂項

本次更新包含幾項細微說明文件改善。此版與 2.6.0-alpha02 大致相同。

2.6.0-alpha02 版

2021 年 4 月 21 日

發布 androidx.work:work-*:2.6.0-alpha02查看 2.6.0-alpha02 版的修訂項

新功能

  • 為支援任何程序的工作站提供支援。(Iaf200)

  • 已新增 RemoteCoroutineWorker,這是 RemoteListenableWorker 的實作,可繫結至遠端程序。(I30578)

API 變更

  • 新增對 TEMPORARILY_UNMETERED 的網路限制支援功能 (I08d5e)
  • setProgressAsync() 的多程序工作站支援。(Ib6d08)
  • 將「WorkManagerInitializer」設為公開,讓其他 androidx.startup.Initializer 可以當做依附元件使用。(I5ab11)

2.6.0-alpha01 版

2021 年 3 月 24 日

發布 androidx.work:work-*:2.6.0-alpha01查看 2.6.0-alpha01 版的修訂項

新功能

  • WorkManager 現已使用 androidx.startup 來初始化 WorkManager。 先前的設定是由 androidx.work.impl.WorkManagerInitializer 執行。(aosp/1608813)

    如果使用 tools:node="remove" 過去用來初始化程序生命週期的 ContentProvider,您必須改為執行下列步驟。

     <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>
    

    (或)

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

API 變更

  • 新增 Result.getOutputData() API,可傳回 ListenableWorker 的 outputData (Ie51e3)。

修正錯誤

  • 為 OEM 錯誤新增解決方法,因為在使用 AlarmManager API 時,系統會擲回 SecurityException。(aosp/1587518)

2.5.0 版

2.5.0 版

2021 年 1 月 27 日

發布 androidx.work:work-*:2.5.0查看 2.5.0 版的修訂項

自 2.4.0 版以來的重大變更

  • 使用多個程序的應用程式適用的新的 :work:work-multiprocess 成果。這會將工作要求排程合併為單一程序,藉此提升效能。
  • 有時候,ActivityManager 無法為 JobService 例項執行例項化,以啟動工作。導致基礎工作因平台錯誤而遭到捨棄。WorkManager 現在可以確保當 Application 透過協調工作初始化時,每個 WorkRequest 都有備份工作。這可大幅提升工作執行可靠性。(b/172475041aosp/1489577)。
  • WorkManager 會縮短 WorkRequestWorkRequest 完成後追蹤的緩衝時間長度,以減少資料庫的成長。時間長度為 7 天前。縮減為 1 天 + keepResultsForAtLeast 持續時間 (aosp/1419708)。
  • TestListenableWorkerBuilder 現在支援修訂後的類別 (適用於 ListenableWorker),以便簡化測試。(aosp/1443299b/169787349)
  • WorkManager 檢查器現已開放使用 Android Studio Arctic Fox 使用。

2.5.0-rc01 版

2021 年 1 月 13 日

發布 androidx.work:work-*:2.5.0-rc012.5.0-rc01 版包含此連結所列的修訂項目。

修正錯誤

  • 已修正在使用 WorkQuery 式 API 後,實體在更新後無法正確失效 getWorkInfosLiveData 的錯誤。(aosp/1540566b/173769028)
  • 修正在少數情況下,資料庫交易未標示為成功的錯誤。這會導致部分 Motorola 裝置發生問題。(aosp/1535368b/175944460)
  • 已修正在取消從程序中解除繫結時略過 NoSuchElementException 的錯誤。(aosp/1530589)
  • 改善 ConstraintTrackingWorker,以便在 ListenableWorker 已停止的情況下停止該服務。(aosp/1496844b/172946965)
  • 更新 androidx.work 程式庫以指定 Java 8 (Ibd2f2)

2.5.0-beta02 版

2020 年 12 月 2 日

發布 androidx.work:work-*:2.5.0-beta02查看 2.5.0-beta02 版的修訂項

修正錯誤

  • 修正 androidx.work:work-multiprocess 的錯誤,該錯誤會讓 WorkManager 在嘗試繫結至指定程序時意外封鎖呼叫執行緒。(aosp/1475538)
  • 修正 PeriodicWorkRequest 無法正確核對的錯誤。(b/172475041aosp/1489577)。
  • 針對平台錯誤新增解決方案,該錯誤會導致在使用 setForeground* API 時停用前景服務。(b/170924044aosp/1489901)。

2.5.0-beta01 版

2020 年 10 月 28 日

發布 androidx.work:work-*:2.5.0-beta01查看 2.5.0-beta01 版的修訂項

新功能

  • WorkManager 會自動調節處理中作業排程器可擷取的 WorkRequest 數量。要求仍以 FIFO 的順序執行。(aosp/1455228)
  • 當應用程式的資料儲存庫處於不良狀態時,WorkManager 會嘗試還原。(aosp/1463103)

修正錯誤

  • ListenableWorker 中斷時,立即將其標記為 ENQUEUED,以便之後重新安排時間。(aosp/1455618b/170273988)。

2.5.0-alpha03 版

2020 年 10 月 14 日

發布 androidx.work:work-*:2.5.0-alpha03查看 2.5.0-alpha03 版的修訂項

API 變更

  • TestListenableWorkerBuilderTestWorkerBuilder 不會使用原始類型。(I883adb/169787349)

修正錯誤

  • 使用 ApplicationInfo 來判斷預設應用程式程序的名稱 (b/168716641aosp/1429950)。
  • 修正 RemoteWorkManagerRemoteWorkContinuation 的顯示規則。這些 API 不會再標示為 @Restricted。(aosp/1432091)
  • 修正 :work:work-multiprocess 的保護措施規則。(aosp/1432091)
  • 針對繫結於前景服務的長時間工作,改善其通知生命週期。(b/168502234aosp/1431331)。

2.5.0-alpha02 版

2020 年 9 月 16 日

發布 androidx.work:work-*:2.5.0-alpha022.5.0-alpha02 版包含此連結所列的修訂項目。

新功能

  • 將 API 新增至 WorkQuery 即可使用 id 來查詢 WorkInfo。(aosp/1412372b/157335295)
  • WorkManager 能進一步支援使用多個程序與新成果 (androidx.work:work-multiprocess:*) 的應用程式。這項新成果可協助解決大型應用程式遇到的一些問題:
    • 一般來說,WorkManager 必須在每個應用程式程序中進行初始化。但也不是很棒的情況,因為 SQLite 內容的數量會增加,進而造成其他問題。WorkManager 現已推出新 API,可用來指定使用 Configuration#setDefaultProcessName(processName) 指定的「主要」應用程式程序。processName 是完整的程序名稱,格式為 packageName:processName (例如 com.example:remote)。
    • 新 API:RemoteWorkManagerRemoteWorkContinuation 可進行 enqueuecancelquery 工作要求。這些 API「不」包含 LiveData 變體,以避免多個程序中的 SQLite 爭用情況。所有傳送至 enqueuecancelquery 的呼叫都會透過 AIDL 轉送至 primary 應用程式程序,並傳回流動 ListenableFuture。 (aosp/1392657aosp/1411210aosp/1412215aosp/1417713 )

API 變更

  • 針對沒有未完成依附元件的 WorkRequest,WorkManager 現在會更積極修剪已完成的該項目。緩衝時間長度已從 7 天變更為 1 天 (aosp/1419708)。

修正錯誤

  • WorkManager 會主動協調工作,因此 WorkManager 初始化時,WorkRequestJobScheduler 工作也會保持同步。(aosp/1412794b/166292069)

2.5.0-alpha01 版

2020 年 8 月 19 日

發布 androidx.work:work-*:2.5.0-alpha01查看 2.5.0-alpha01 版的修訂項

新功能

  • 內部 API 相關變更,讓我們日後能透過 WorkManager 提供更優質的工具。敬請密切關注最新消息。

修正錯誤

  • 在部分裝置上追蹤網路狀態時,必須處理 SecurityException。(aosp/1396969)

外部貢獻

2.4.0 版

2.4.0 版

2020 年 7 月 22 日

發布 androidx.work:work-*:2.4.0查看 2.4.0 版的修訂項

自 2.3.0 版以來的重大變更

  • WorkManager 個處理中的排程器現已支援更多功能。先前處理過程中,Scheduler 只會執行未延遲且符合限制條件的工作。現在,處理中的排程器會追蹤未來可能執行的 WorkRequest,包括 PeriodicWorkRequests。程序 Scheduler 也未觀察排程限制 (但仍受限於 WorkManager 使用的 Executor 大小)。也就是說,當應用程式在前景運作時,應用程式可以執行更多 WorkRequests 作業。為管理前景工作的延遲執行,WorkManager 也導入了新的可設定 RunnableScheduler。(aosp/1185778)
  • WorkManager 現在支援 RxJava 3。如要使用 RxJava 3,應加入以下依附元件:implementation "androidx.work:work-rxjava3:2.4.0"。(aosp/1277904)
  • 新增使用 WorkQuery 查詢 WorkInfo 的功能。如果開發人員想以多個屬性組合查詢 WorkInfo,就可以採用這種做法。詳情請參閱 WorkQuery.Builder.fromStates(...)WorkQuery.Builder. fromTags(...)WorkQuery.Builder.fromUniqueWorkNames(...)。(aosp/1253230b/143847546)
  • 新增透過以下功能向「WorkManager」要求診斷資訊的功能:

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

    這能提供幾項實用資訊,包括:

    • 過去 24 小時內完成的 WorkRequest 要求。
    • 目前正在執行的 WorkRequest 要求。
    • 已排定的 WorkRequest。(aosp/1235501)
  • 新增與 APPEND 類似的 ExistingWorkPolicy.APPEND_OR_REPLACE,但會取代已取消或失敗的鏈結。(b/134613984aosp/1199640)。

  • 提供可新增自訂 RunnableScheduler 的功能,以追蹤日後必須執行的 WorkRequest。這個名稱會顯示在處理中的排程器中。(aosp/1203944)

  • 開始支援在使用 DelegatingWorkerFactory 時動態新增委派目標工廠。 (b/156289105aosp/1309745)

  • BATTERY_NOT_LOW 限制條件的追蹤方式更符合平台。(aosp/1312583)

  • 處理中排程器現在會使用更完善的 API 來判斷程序的名稱。這項功能可以有效支援使用多個程序的應用程式。(aosp/1324732)

  • 可強制執行的新 Lint 規則:

    • 使用 setForegroundAsync() API 時適用的 foregroundServiceType。(b/147873061aosp/1215915)。
    • 指定 WorkManager 在直接使用 JobService API 時應使用的 JobScheduler ID。aosp/1223567
    • 新增 Lint 規則,確保在使用 WorkerFactory 時,ListenableWorker 現已採用 public。(aosp/1291262)
  • 如果對 setForegroundAsync() 的呼叫並未在完成 ListenableWorker 前結束,系統會在傳回的 ListenableFutureIllegalStateException 發出信號。(aosp/1262743)

  • 修正前景 Worker 停止後,ForegroundService 不會停止運作的問題。(b/155579898aosp/1302153)。

  • 修正錯誤:WorkManager 嘗試執行繫結至前景服務的 Worker 的多個例項時,系統會發生錯誤。(b/156310133aosp/1309853)

2.4.0-rc01 版

2020 年 6 月 24 日

發布 androidx.work:work-*:2.4.0-rc01查看 2.4.0-rc01 版的修訂項

修正錯誤

  • 處理中排程器現在會使用更完善的 API 來判斷程序的名稱。這項功能可以有效支援使用多個程序的應用程式。(aosp/1324732)

2.4.0-beta01 版

2020 年 5 月 20 日

發布 androidx.work:work-gcm:2.4.0-beta01androidx.work:work-runtime:2.4.0-beta01androidx.work:work-runtime-ktx:2.4.0-beta01androidx.work:work-rxjava2:2.4.0-beta01androidx.work:work-testing:2.4.0-beta01查看 2.4.0-beta01 版的修訂項

修正錯誤

  • 修正前景 Worker 停止後,ForegroundService 不會停止運作的問題。(b/155579898aosp/1302153)。
  • 修正錯誤:WorkManager 嘗試執行繫結至前景服務的 Worker 的多個例項時,系統會發生錯誤。(b/156310133aosp/1309853)
  • 新增使用 DelegatingWorkerFactory 的動態新增係數來委派代表。(b/156289105aosp/1309745)
  • BATTERY_NOT_LOW 限制條件的追蹤方式更符合平台。(aosp/1312583)

2.4.0-alpha03 版

2020 年 4 月 29 日

發布 androidx.work:work-*:2.4.0-alpha03查看 2.4.0-alpha03 版的修訂項

新功能

  • WorkManager 現在支援 RxJava 3。如要使用 RxJava 3,應加入以下依附元件:implementation "androidx.work:work-rxjava3:2.4.0-alpha03"。(aosp/1277904)
  • 新增 Lint 規則,確保在使用 WorkerFactory 時,ListenableWorker 現已採用 public。(aosp/1291262)

API 變更

  • ListenableWorker 執行完成後呼叫 setProgressAsync(),現在會透過 ListenableFuture 傳送 Exception 信號。(aosp/1285494)
  • WorkQuery.Builder」已標示為「final」。(aosp/1275037)
  • WorkQuery.Builder 的工廠方法 withStateswithTagswithUniqueWorkNames 已重新命名為 fromStatesfromTagsfromUniqueWorkNames。(aosp/1280287)

修正錯誤

2.4.0-alpha02 版

2020 年 4 月 1 日

發布 androidx.work:work-*:2.4.0-alpha022.4.0-alpha02 版包含此連結所列的修訂項目。

新功能

  • 新增一項 Lint 規則,當 WorkRequest 需要 Constraints.setRequiresCharging(...)Constraints.setRequiresDeviceIdle(...) 時顯示警告訊息。部分裝置無法同時充電或閒置。因此這類要求的執行速度低於預期。(aosp/1253840)

API 變更

  • 新增使用 WorkQuery 查詢 WorkInfo 的功能。如果開發人員想以多個屬性組合查詢 WorkInfo,就可以採用這種做法。詳情請參閱 WorkQuery.Builder withStates(...)WorkQuery.Builder withTags(...)WorkQuery.Builder withUniqueWorkNames(...)。(aosp/1253230b/143847546)

  • 如果對 setForegroundAsync() 的呼叫並未在完成 ListenableWorker 前結束,系統會在傳回的 ListenableFutureIllegalStateException 發出信號。(aosp/1262743)

修正錯誤

2.4.0-alpha01 版

2020 年 3 月 4 日

發布 androidx.work:work-*:2.4.0-alpha012.4.0-alpha01 版包含此連結所列的修訂項目。

新功能

  • WorkManager 個處理中的排程器現已支援更多功能。先前處理中的排程排程只會執行「未」延遲且符合限制條件的工作。現在,處理中的排程器會追蹤未來可能執行的 WorkRequest,包括 PeriodicWorkRequest。程序內排程器也不會遵守排程限制 (但仍然受到 WorkManager 使用的 Executor 大小限制)。也就是說,當應用程式在前景運作時,應用程式還可以執行更多 WorkRequest。(aosp/1185778)

  • 新增使用 adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>" 向 WorkManager 要求診斷資訊的功能。這能提供幾項實用資訊,包括:

    • 過去 24 小時內完成的 WorkRequest 要求。
    • 目前正在執行的 WorkRequest 要求。
    • 已排定的 WorkRequest。(aosp/1235501)
  • 可強制執行的新 Lint 規則:

    • 使用 setForegroundAsync() API 時適用的 foregroundServiceType。(b/147873061aosp/1215915)。
    • 指定 WorkManager 在使用 JobService API 時應使用的 JobScheduler ID。(aosp/1223567)

API 變更

  • 新增與 APPEND 類似的 ExistingWorkPolicy.APPEND_OR_REPLACE,但會取代已取消或失敗的鏈結。 (b/134613984aosp/1199640)

  • 提供新增自訂 RunnableScheduler 的功能,以追蹤日後必須執行的 WorkRequest。這個名稱會顯示在處理中的排程器中。(aosp/1203944)

修正錯誤

  • 已於 RxWorker 淘汰 setProgress(),因為該物件先前會傳回 Single<Void> 這個不支援的類型。新增了 setCompletableProgress() 這個新 API,傳回的結果改為 Completable;同時也加入了新的 Lint 規則,可協助遷移至新的 API (b/150080946aosp/1242665)。

2.3.4 版

2.3.4 版

2020 年 3 月 18 日

發布 androidx.work:work-*:2.3.4查看 2.3.4 版的修訂項

修正錯誤

  • 10 分鐘的執行時間過後,有個錯誤會引發多個長時間執行的 Worker 例項運作,現在這個錯誤已修正。(aosp/1247484b/150553353)
  • 修正 WorkManager 的 lint IssueRegistry。謝謝 Slack 的 @ZacSweers 提問。(aosp/1217923)

2.3.3 版

2.3.3 版

2020 年 3 月 4 日

發布 androidx.work:work-*:2.3.3查看 2.3.3 版的修訂項

修正錯誤

2.3.2 版

2.3.2 版

2020 年 2 月 19 日

發布 androidx.work:work-*:2.3.2查看 2.3.2 版的修訂項

修正錯誤

  • 修正 WorkManagerr 在極少數情況下超過 100 項工作限制的問題。(aosp/1226859b/149092520)
  • 修正 ConstraintControllers 中的競爭狀況。(aosp/1220100)
  • 改善長時間執行工作站的管理前景服務生命週期。(aosp/1226295)
  • 針對長時間取消的工作站在工作站取消作業時,改善管理通知的管理程序。(aosp/1228346)

2.3.1 版

2.3.1 版

2020 年 2 月 5 日

發布 androidx.work:work-*:2.3.1查看 2.3.1 版的修訂項

修正錯誤

  • 針對在前景 Service 執行時運作的長期 Worker,更妥善地管理 Notification 的生命週期。(aosp/1218539b/147249312)。
  • WorkManager現在需要 androidx.sqlite:sqlite-framework:2.1.0 的穩定性。(aosp/1217729)
  • 新增 Lint 規則,確保在 ForegroundInfo 中使用 foregroundServiceType 時,是在 AndroidManifest.xml 中指定 foregroundServiceType (aosp/1214207b/147873061)。

2.3.0 版

2.3.0 版

2020 年 1 月 22 日

發布 androidx.work:work-*:2.3.0,且自 2.3.0-rc01 版以來皆無變更。查看 2.3.0 版的修訂項

自 2.2.0 版以來的重要變更

  • 支援透過 ListenableWorker#setForegroundAsync() 長時間執行或重要作業。
  • 透過 ListenableWorker#setProgressAsync() 支援工作站進度。
  • WorkManager 現在可以將額外的 Lint 規則封裝為程式庫的一部分,有助於及早發現錯誤。

2.3.0-rc01 版

2020 年 1 月 8 日

發布 androidx.work:work-*:2.3.0-rc01查看 2.3.0-rc01 版的修訂項

這個版本與 2.3.0-beta02 相同

修正錯誤

  • work-testing 構件現在定義了 work-runtime-ktxapi 依附元件 (aosp/1194410)。

2.3.0-beta02 版

2019 年 12 月 18 日

發布 androidx.work:work-*:2.3.0-beta02查看 2.3.0-beta02 版的修訂項

新功能

  • 針對無法復原的 SQLite 例外狀況,新增更優質的錯誤訊息。(aosp/1185777)
  • 新增了 Lint 規則,以確保在使用隨選初始化設定時,將內容供應者 androidx.work.impl.WorkManagerInitializerAndroidManifest.xml 中移除 (aosp/1167007)。
  • 在下列情況下加入了 Lint 警告:enqueue() 用於 PeriodicWorkRequest 而非 enqueueUniquePeriodicWork()。(aosp/1166032)

API 變更

  • ForegroundInfo 現在需要指定在使用 ListenableWorker.setForegroundAsync() 時要使用的 notificationId這是一項破壞性變更。這樣一來,您就可以同時執行多個長時間的 WorkerWorkManager 也會更妥善地管理所提供 Notification 的生命週期。 (b/145473554aosp/1181208asop/1181216asop/1183577)

修正錯誤

  • 已修正 AlarmManager 實作錯誤,無法正確清除鬧鐘 (aosp/1156444)。
  • 修正 WorkRequest 空白清單會導致建立 WorkContinuation 鏈不正確的問題。(b/142835274aosp/1157051)。

依附元件變更

  • WorkManager 現在會使用 Room 2.2.2。

2.3.0-beta01 版

2019 年 11 月 20 日

發布 androidx.work:work-*:2.3.0-beta01查看 2.3.0-beta01 版的修訂項

新功能

  • 新增一項 Lint 規則,避免在使用隨選初始化設定時,因錯誤導入 androidx.work.Configuration.Provider 而造成開發人員錯誤。aosp/1164559

2.3.0-alpha03 版

2019 年 10 月 23 日

發布 androidx.work:work-*:2.3.0-alpha03查看 2.3.0-alpha03 版的修訂項

新功能

  • 新增 WorkManager.createCancelPendingIntent() API,可讓您輕鬆取消 WorkRequest,無需註冊 AndroidManifest.xml 中的其他元件。這個 API 可讓您輕鬆取消 NotificationWorkRequest。我們預計會在 2.3.0 版中與新的前景 API 搭配使用。
  • WorkManager 現在會使用 androidx.room:*:2.2.0 穩定版。

API 變更

  • ForegroundInfo.getNotificationType() 重新命名為 ForegroundInfo.getForegroundServiceType(),使其與基礎平台 API 更加一致。(b/142729893aosp/1143316)。

修正錯誤

  • 修正在交易以外對 setTransactionSuccessful() 發出不必要的呼叫時,所導致的錯誤。進行罕見的遷移作業。(b/142580433aosp/1141737)。

2.3.0-alpha02 版

2019 年 10 月 9 日

發布 androidx.work:work-*:2.3.0-alpha02查看 2.3.0-alpha02 版的修訂項

新功能

  • WorkManager 現已支援長時間執行的作業,或是由 OS 保持運行的重要工作。詳情請參閱 ListenableWorker#setForegroundAsync() (Kotlin 則為 CoroutineWorker#setForeground())。(aosp/1133636)

API 變更

  • Data 中的 containsKey API 已重新命名為 hasKeyWithValueOfType。「ktx」媒體庫中對應的擴充功能也已重新命名。(b/141916545)

修正錯誤

  • WorkRequest 加入佇列的方法限制時,WorkManager 排程會公平運作。(aosp/1105766)
  • 只有在工作未完成時,WorkManager 才會呼叫 ListenableWorker#onStopped() (b/140055777)。
  • 現在,當工作站中斷或到達終端機狀態時,WorkManager 會移除進度資訊。(aosp/1114572)
  • 現在,Data 有更加實用的 toString() 表示法。(b/140945323)
  • Data 現已採用更好的 equals() 方法。同時也支援 Array 類型的 deepEquals。(b/140922528)
  • WorkManager 現在會將內部資料庫和偏好設定檔案儲存在一個無備份的目錄中。(b/114808216)

2.3.0-alpha01 版

2019 年 8 月 22 日

發布 androidx.work:work-*:2.3.September 5, 20190-alpha01。您可以前往這裡查看這個版本包含的修訂項目。

新功能

  • ListenableWorker 現在可以透過 setProgressAsync() API 設定進度。另外我們也在 CoroutineWorker 中新增了對應的 suspend-setProgress API,並在傳回 Single<Void>RxWorker 中加入 setProgress。透過這些新推出的 API,工作站可透過 WorkInfo 來傳送進度資訊,該項目具有對應的 getProgress API。(b/79481554)
  • DatacontainsKey() API 可用於驗證 Worker 的輸入資料是否具備符合預期類型的金鑰 (b/117136838)。
  • Data 現在可以使用 Data.toByteArray()Data.fromByteArray() 進行序列化。請注意,Data 不提供版管理保證,因此「請勿」保留此版本,或是將這個值用於應用程式之間的 IPC。而且只能在「同一」應用程式的多個程序之間使用。
  • 已新增透過 Configuration.setInputMergerFactory 指定 InputMergerFactory 的功能。(b/133273159)

API 變更

  • 如果 WorkerFactory 傳回先前叫用的 ListenableWorker 例項,WorkManager 會擲回 IllegalStateException 的例項 (b/139554406)。
  • 更新了說明文件中有關 ListenableFuture 取消流程和 ListenableWorker 所含 onStopped() 回呼方法的內容 (b/138413671)。

修正錯誤

  • 處理中的排程器現在會忽略具有 idle 限制的 WorkRequest。這些要求現在只會由 JobScheduler 在裝置實際支援 idle 時接收。 (aosp/1089779)
  • TestScheduler 現在會在測試中正確使用指定的 Executor 執行其內部工作執行者。(aosp/1090749)

2.2.0 版

2.2.0 版

2019 年 8 月 15 日

發布 androidx.work:work-*:2.2.0。您可以前往這裡查看這個版本包含的修訂項目。

這個版本與 androidx.work:work-*:2.2.0-rc01 相同。

2.1.0 版中的 2.2.0 重要變更

androidx.work:work-gcm:2.2.0 是新的 Maven 成果,可支援在 <= 22 API 級別的 Google Play 服務中使用 GCMNetworkManager 做為排程器。這是選擇性的依附元件,可協助您針對舊版 API 提供更穩定且效能更可靠的背景處理功能。如果您的應用程式使用 Google Play 服務,請將這個依附元件新增至 Gradle 檔案,讓系統自動取得 GCMNetworkManager 支援。如果您無法使用 Play 服務,WorkManager 會繼續在舊裝置上切換回 AlarmManager。

2.2.0-rc01 版

2019 年 7 月 30 日

發布 androidx.work:work-*:2.2.0-rc01。您可以前往這裡查看這個版本包含的修訂項目。

修正錯誤

  • 修正 AlarmManager 實作方式中的錯誤,該錯誤會導致服務太早關閉,並在極少數情況下造成 RejectedExecutionException (aosp/1092374) (b/138238197)。
  • 已針對在某些裝置上使用 JobScheduler API 的情況新增 NullPointerException 的解決方法。(aosp/1091020) (b/138364061)、(b/138441699)

2.2.0-beta02 版

2019 年 7 月 19 日

發布 androidx.work:work-*:2.2.0-beta02。您可以前往這裡查看這個版本包含的修訂項目。

修正錯誤

  • 移除 2.2.0-beta01 中意外引入的 Jacoco 依附元件。

2.2.0-beta01 版

2019 年 7 月 17 日

發布 androidx.work:work-*:2.2.0-beta01。您可以前往這裡查看這個版本包含的修訂項目。

新功能

  • androidx.work:work-gcm:2.2.0-beta01 是新的 Maven 成果,可支援在 API 級別 <= 22 的 Google Play 服務中使用 GCMNetworkManager 做為排程器。這是「選擇性」依附元件,可協助系統在較舊的 API 版本提供更可靠且較具效能的背景處理功能。如果您的應用程式使用 Google Play 服務,請將這個依附元件新增至 Gradle 檔案,讓系統自動取得 GCMNetworkManager 支援。如果您無法使用 Play 服務,WorkManager 會繼續在舊裝置上切換回 AlarmManager。

修正錯誤

  • 修正在 Nvidia Shield K1 平板電腦追蹤網路狀態時修正 IllegalArgumentException 的問題。(aosp/1010188)

2.1.0 版

2.1.0 版

2019 年 7 月 11 日

發布 androidx.work:work-*:2.1.0。這個版本與 androidx.work:work-*:2.1.0-rc01 相同。

自 2.0.1 版以來的重要變更

  • work-runtime-ktx 需要 Java 8。如果遇到任何問題,您可以將 kotlinOptions { jvmTarget = "1.8" } 新增至 build.gradle
  • 新增 WorkManager 的初始化初始化功能 (僅供參照參考時建立 WorkManager)。b/127497100 如要設定專案進行初始化,請按照下列指示操作:
    1. 停用自動初始化工具
    2. 在自訂 Application 物件中導入 Configuration.Provider
    3. WorkManager.getInstance() 的所有參照變更為 WorkManager.getInstance(Context)。在本次變更中,我們已淘汰 WorkManager.getInstance()。就算您未進行隨選初始化,還是可以放心呼叫新的 WorkManager.getInstance(Context) 替換作業。
  • PeriodicWorkRequest 現已支援初始延遲。您可以在 setInitialDelay 上使用 PeriodicWorkRequest.Builder 方法來設定初始延遲時間。b/111404867
  • 新增透過 DelegatingWorkerFactory 委派給一或多個已註冊 WorkerFactory 的功能。b/131435993
  • 新增透過 Configuration.Builder.setTaskExecutor 自訂所有內部圖書保留的 Executor 功能。
  • 新增在 work-testing 構件中使用 TestWorkerBuilderTestListenableWorkerBuilder 來建立可測試單位的 WorkerListenableWorker 類別。
    • 請注意,work-testing 現在會將 Kotlin 提取為依附元件,並預設包含數個 Kotlin 擴充功能。
  • WorkInfo 中新增執行作業嘗試次數。b/127290461
  • Data 類型現在可以儲存及擷取位元組和位元組陣列。這項操作並「不會」變更 Data 物件的大小上限。
  • WorkManager 現在會使用 Room 2.1.0 來修正部分資料庫問題。

2.1.0-rc01 版

2019 年 6 月 27 日

發布 androidx.work:work-*:2.1.0-rc01。您可以前往這裡查看這個版本包含的修訂項目。

修正錯誤

  • 修正錯誤:在備份作業執行期間,當您使用 JobScheduler 執行工作時,應用程式會停止運作,詳情請參閱 b/135858602

2.1.0-beta02 版

2019 年 6 月 20 日

發布 androidx.work:work-*:2.1.0-beta02。您可以前往這裡查看這個版本包含的修訂項目。

修正錯誤

  • TestListenableWorkerBuilder 現在建立 ListenableWorker 的例項時,會使用正確的 WorkerFactoryb/135275844
  • 修正錯誤:該錯誤會讓系統在處理停擺順位時,造成 WorkRequest 的執行期間產生偏移。b/135272196

2.1.0-beta01 版

2019 年 6 月 13 日

發布 androidx.work:work-*:2.1.0-beta01。您可以前往這裡查看這個版本包含的修訂項目。

修正錯誤

  • WorkManager 現在會使用 Room 2.1.0 來修正部分資料庫問題。
  • 已移除主執行緒的部分啟動磁碟 I/O。
  • 已修正限制追蹤功能中的潛在鎖定。B/134361006
  • 已預先取消歸因於 WorkManager 的無效工作。b/134058261
  • 為 JobTimer API 加入了一些防禦裝置,以杜絕異常的裝置。

2.1.0-alpha03 版

2019 年 6 月 5 日

發布 androidx.work:*:2.1.0-alpha03

修正錯誤

  • 改善 PeriodicWorkRequest 的說明文件。
  • WorkManagerTestInitHelper 現在會使用正確的背景執行者進行測試。
  • 修正在部分裝置上處理大型交易時發生的 SQLite 問題。(b/130182503)
  • WorkManager 的依附元件現在較為精細。(b/133169148).
  • 使用 WorkManager 安排工作時,解決 JobScheduler 實作上關於 OEM 的特定錯誤。
  • 改善 AlarmManager 排程器在服務生命週期中過去造成的當機問題。(b/133313734)

2.1.0-alpha02 版

2019 年 5 月 16 日

發布 WorkManager 2.1.0-alpha02。這個版本包含數個新的 API。

API 變更

  • PeriodicWorkRequest 現已支援初始延遲。您可以在 setInitialDelay 上使用 PeriodicWorkRequest.Builder 方法來設定初始延遲時間。b/111404867

  • 新增透過 DelegatingWorkerFactory 委派給一或多個已註冊 WorkerFactory 的功能。b/131435993

  • 新增透過 Configuration.Builder.setTaskExecutor 自訂所有內部圖書保留的 Executor 功能。

  • 改善 WorkRequest.keepResultsForAtLeast (b/130638001)、隨選初始化及 PeriodicWorkRequest.Builder (b/131711394) 相關說明文件。

2.1.0-alpha01 版

2019 年 4 月 24 日

發布 WorkManager 2.1.0-alpha01。這個版本包含數個新的 API。請注意,從這個版本開始,新功能將不會回溯至 1.x 版。建議您改用 2.x。

API 變更

  • 新增 WorkManager 隨選初始化功能,這項功能僅會在參照時建立 WorkManager。b/127497100 如要設定專案進行初始化,請按照下列指示操作:
    1. 停用自動初始化工具
    2. 在自訂 Application 物件中導入 Configuration.Provider
    3. WorkManager.getInstance() 的所有參照變更為 WorkManager.getInstance(Context)。在本次變更中,我們已淘汰 WorkManager.getInstance()。就算您未進行隨選初始化,還是可以放心呼叫新的 WorkManager.getInstance(Context) 替換作業。
  • 新增在 work-testing 構件中使用 TestWorkerBuilderTestListenableWorkerBuilder 來建立可測試單位的 WorkerListenableWorker 類別。
    • 請注意,work-testing 現在會從 Kotlin 提取依附元件,但也會預設包含數個 Kotlin 擴充功能。
  • WorkInfo 中新增執行作業嘗試次數。b/127290461
  • Data 類型現在可以儲存及擷取位元組和位元組陣列。這項操作並「不會」變更 Data 物件的大小上限。
  • 已淘汰 CoroutineWorker.coroutineContext. 這個欄位已誤標為 CoroutineDispatcher;您應該不再需要該函式,因為只要自行在停權函式主體中前往適當的 CorContextineContext 即可。
  • RxWorker.createWork()RxWorker.getBackgroundScheduler() 現已使用 @NonNull 傳回類型加註。

2.0.1 版

2.0.1 版

2019 年 4 月 9 日

發布 WorkManager 2.0.1。這個版本與 2.0.1-rc01 相同。

2.0.1-rc01 版

2019 年 4 月 3 日

發布 WorkManager 2.0.1-rc01。這個版本修正了一些錯誤。針對舊版 1.x 使用者,有些變更也出現在 1.0.1-rc01 中。

修正錯誤

  • 機器人測試功能現在可以搭配 WorkManager 正確運作。b/122553577
  • 修正問題:在 Pre-JobScheduler API 中,未清除限制追蹤的極端案例當機。b/129226383
  • 已修正 StackOverflowError 可處理長時間工作的情況。b/129091233
  • 更新 PeriodicWorkRequest 的說明文件,表示 API 23 不支援彈性時間。
  • 修正 Kotlin 說明文件中部分無效連結。

2.0.0 版

2.0.0 版

2019 年 3 月 20 日

推出 WorkManager 2.0.0。這個版本與 2.0.0-rc01 相同,且是搭載 AndroidX 依附元件的 AndroidX 1.0.0 穩定版。建議您指定這個版本,而不是舊版 1.x。所有有效開發作業將以 2.x 和 1.x 做為目標版本,但只會在少數時間內收到重大錯誤修正。

2.0.0-rc01 版

2019 年 3 月 7 日

推出 WorkManager 2.0.0-rc01。這個版本與 1.0.0 穩定版相同,但含有 AndroidX 依附元件。一旦達到 2.0.0 的穩定版,應包含這個版本,而舊版 1.x 只會收到部分重大錯誤修正。所有主動開發作業都會指定 2.x。

AndroidX 之前的依附元件

如要進一步瞭解如何使用 Kotlin 擴充功能,請參閱 KTX 說明文件
參考文件: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")
}

1.0.1 版

1.0.1 版

2019 年 4 月 9 日

發布 WorkManager 1.0.1。這個版本與 1.0.1-rc01 相同。

請注意,我們「強烈」建議使用者更新至 WorkManager 2.x,因為未來 1.x 分支版本只有少數更新。1.x 程式庫也不會發布新的 API。

1.0.1-rc01 版

2019 年 4 月 2 日

推出 WorkManager 1.0.1-rc01。這個版本修正了一些錯誤。

修正錯誤

  • 機器人測試功能現在可以搭配 WorkManager 正確運作。b/122553577
  • 修正問題:在 Pre-JobScheduler API 中,未清除限制追蹤的極端案例當機。b/129226383
  • 已修正 StackOverflowError 可處理長時間工作的情況。b/129091233

1.0.0 版

1.0.0 版

2019 年 3 月 5 日

這是 WorkManager 的 1.0.0 穩定版。這個版本的 WorkManager 與 1.0.0-rc02 相同。

1.0.0-rc02 版

2019 年 2 月 21 日

這是 WorkManager 1.0.0 穩定版的第二個候選版本。這個版本修正了兩項錯誤。

修正錯誤

  • Worker 現已在應用程式當機後正確顯示。 b/124546316

  • 擲回未勾選 ExceptionWorker 現已正確標示為 FAILED,不會再停止應用程式處理程序。

1.0.0-rc01 版

2019 年 2 月 14 日

這是 WorkManager 1.0.0 穩定版的候選版本。這個版本已修正一個錯誤。

修正錯誤

  • AlarmManager 實作現在會根據 PeriodicWorkRequests 正確遵循 flex 期間。b/124274584

1.0.0-beta05 版

2019 年 2 月 6 日

這個版本修正了一些錯誤。

修正錯誤

  • 已修正 API 23 上使用 JobScheduler.getPendingJob(...) 的情況。b/123893059
  • 已修正 Android 5.1 (API 級別 22) 以下版本裝置中的 NullPointerExceptionb/123835104

1.0.0-beta04 版

2019 年 2 月 4 日

這個版本修正了一些錯誤。

修正錯誤

  • 改善 AlarmManager 實作的 PeriodicWork 排程。
  • 以往使用 AlarmManager 實作時,WorkManager 無法正確追蹤限制,這個問題現已修正。b/123379508
  • 已修正在採用 AlarmManager 實作時,WorkManager 無法重試處理程序的工作。b/123329850
  • 已修正在採用 AlarmManager 實作時,WorkManager 會外洩 Wakelocks 的情況。

1.0.0-beta03 版

2019 年 1 月 25 日

這個版本修正了一些錯誤。

修正錯誤

  • 我們推出了迴歸 1.0.0-beta02,在某些情況下會導致工作無法正確執行。b/123211993
  • 修正工作未正確履行輪詢時間的案件。 b/122881597
  • 已修正 Android 5.1 (API 或更低版) 裝置上的 ConcurrentModificationException 問題。我們將於 1.0.0-beta02 中修正這項問題。b/121345393
  • 已為資訊清單中的部分元件新增 exported=false,但這個註解缺少這項註解。
  • 在套件層級說明文件中加入 WorkManager 與 OS 互動的相關資訊。

1.0.0-beta02 版

2019 年 1 月 15 日

這個版本修正了一些錯誤。

修正錯誤

  • 修正了週期性工作在搭載 Android 6.0 (API 級別 23) 的裝置上,可能會於每次間隔執行超過一次的極端案件。b/121998363
  • 修正了搭載 Android 5.1 (API 級別 22) 以下版本的裝置上發生的 ConcurrentModificationExceptionb/121345393
  • 針對搭載 Android 5.1 (API 級別 22) 以下版本的裝置修正了未符合限制條件時的工作執行錯誤。b/122578012
  • 最佳化工作完成處理方式,加快某些極端案件中的處理速度。b/122358129
  • 新增了一項變更,解決 WorkManager 使用的多個 LiveData 例項間可能存在的競爭狀況。
  • 已改用 Room 依附元件 1.1.1 (而不是 1.1.1-rc01);這些版本完全相同。 b/122578011

1.0.0-beta01 版

2018 年 12 月 19 日

這個版本沒有任何 API 變更;往後,WorkManager 應該會持續將 API 保持穩定,直到下一個版為止,除非發生重大問題。這個版本修正了一些錯誤。

修正錯誤

  • 先前遭取消的子項於父項工作成功完成後不會再執行。b/120811767
  • 以正確的方式初始化記錄類別 (主要顯示於測試期間)。

1.0.0-alpha13 版

2018 年 12 月 12 日

這個版本包含次要 API 變更,對一些 Kotlin 使用者而言非常實用。

API 變更

  • androidx.work.Result 已移動成為 ListenableWorker 的內部類別。這可防止重構程序與 Kotlin 的頂層 Result 類別發生衝突。「這是一項破壞性的 API 變更。」b/120564418

破壞性 API 變更

  • androidx.work.Result 已移動成為 ListenableWorker 的內部類別。

1.0.0-alpha12 版

2018 年 12 月 5 日

這個版本包含幾項重大 API 變更;請參閱下方的「中斷 API 變更」部分。這個版可能會成為我們發布的第一個 Beta 版。alpha12 也包含詳盡的說明文件更新。

API 變更

  • 新構件 work-rxjava2 導入了 RxWorker。這是一個等待接收 Single<Payload>ListenableWorker
  • 移除了對 Firebase JobDispatcher 的支援,原因是該程式庫即將遭到淘汰。換句話說,隨著我們邁入 Beta 版,work-firebase 構件將不再更新。我們日後會考慮增設替代選項。
  • Payload 合併至 ResultResult 現在是「密封類別」,內含三種具體實作,可透過 Result.success() (或Result.success(Data))、Result.failure() (或Result.failure(Data)) 和 Result.retry() 取得。您的 ListenableFuture 現在會產生 Result,而非 PayloadWorker 沒有輸出 Data 的 getter 和 setter 方法。這是一項破壞性變更。
  • 新增了 Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) 以及相應變體,為觸發速度較慢的內容 URI 提供更完善的支援。b/119919774
  • 新增了 WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) 變體。這個方法必須使用 API 26。
  • 新增了 Operation.await()ListenableFuture.await() Kotlin 擴充功能方法。
  • Operation.getException() 已重新命名為 Operation.getThrowable()。這是一項破壞性變更。
  • ContentUriTriggers 類別和其參照方法不再提供公共使用。這是一項破壞性變更。
  • 移除了 WorkManagerWorkContinuationOneTimeWorkRequest 中的其餘變數引數方法,以簡化 API。如要修正任何版本問題,可以使用 Arrays.asList(...) 包裝現有的變數引數。我們仍會納入每種方法的單一引數版本。這是一項破壞性變更。
  • 移除 WorkContinuation.combine(OneTimeWorkRequest, *) 變數。這些變體提供的 API 較為複雜難懂;現有的 combine 方法比較容易理解。這是一項破壞性變更。

修正錯誤

  • Marchmallow 之前的實作版本現在能夠更穩定地從現行工作程序終止的狀況中恢復。
  • 透過 observeForever 觀測到的 LiveData 可使用 WorkManager 追蹤。這是將 Room 程式庫修正項目向後移植。b/74477406
  • 如果序列化物件超出大小上限,Data.Builder.build() 現在會擲回例外狀況。過去,這只會發生在背景執行緒,因此您無法做出適當處理。
  • 進一步區分已停止與已取消的工作;getWorkInfoById()ListenableWorker.onStopped() 期間會傳回具備 CANCELLED StateWorkInfo
  • ListenableWorker 中將 null Result 視作失敗。b/120362353
  • 對搭載 API 24 且不時擲回 IllegalArgumentException 的 Shield Tablets 做出推測性修正。b/119484416

破壞性 API 變更

  • 移除了對 Firebase JobDispatcher 的支援,原因是該程式庫即將遭到淘汰。換句話說,隨著我們邁入 Beta 版,work-firebase 構件將不再更新。我們日後會考慮增設替代選項。
  • Payload 合併至 ResultResult 現在是「密封類別」,內含三種具體實作,可透過 Result.success() (或Result.success(Data))、Result.failure() (或Result.failure(Data)) 和 Result.retry() 取得。您的 ListenableFuture 現在會產生 Result,而非 PayloadWorker 沒有輸出 Data 的 getter 和 setter 方法。
  • 新增了 Operation.await()ListenableFuture.await() Kotlin 擴充功能方法。
  • Operation.getException() 已重新命名為 Operation.getThrowable()
  • ContentUriTriggers 類別和其參照方法不再提供公共使用。
  • 移除了 WorkManagerWorkContinuationOneTimeWorkRequest 中的其餘變數引數方法,以簡化 API。如要修正任何版本問題,可以使用 Arrays.asList(...) 包裝現有的變數引數。我們仍會納入每種方法的單一引數版本。
  • 移除了 WorkContinuation.combine(OneTimeWorkRequest, *) 變體。這些變體提供的 API 較為複雜難懂;現有的 combine 方法比較容易理解。

1.0.0-alpha11 版

2018 年 11 月 8 日

這個版本包含多項變更,將在 beta 版成為穩定的 API。這個版本有破壞性的 API 變更;請參閱下方的「中斷 API 變更」部分。

API 變更

  • work-runtime-ktx 推出新的 CoroutineWorker
  • WorkStatus 已重新命名為 WorkInfo。所有相應的 getStatus 方法變體也已重新命名為對應的 getWorkInfo 變體。這是一項破壞性變更。
  • ListenableWorker.onStopped() 不再接受用來指出 WorkRequest 是否已取消的布林引數。這項資訊在 WorkManager 中已無區別。這是一項破壞性變更。
  • androidx.work.test 套件已重新命名為 androidx.work.testing 套件。這是一項破壞性變更。
  • Constraints 的 setter 不再是公用 API 的一部分。這是一項破壞性變更。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 先前會傳回陣列,現在則會傳回集合。這是一項破壞性變更。
  • ListenableWorker.onStartWork() 已重新命名為 ListenableWorker.startWork()。這是一項破壞性變更。
  • WorkStatus 的建構函式不再是公用 API 的一部分。這是一項破壞性變更。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 已分別重新命名為 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()。這是一項破壞性變更。
  • 在公用 API 中新增了大量 @NonNull 註解,讓 API 更貼近需求。
  • 新增 WorkManager.enqueueUniqueWork() API,這樣不必建立 WorkContinuation,就能將不重複的 OneTimeWorkRequest 加入佇列。
  • WorkManager 中,enqueuecancel 方法的所有變體現在會傳回新的 Operation 類型。這是一項破壞性變更。
  • enqueue 的所有變體皆不再接受 WorkRequest 的變數引數。這是一項破壞性變更。請改用 Collections。您可以使用 Arrays.asList() 修改現有程式碼。這項變更是為了減少 API 介面和方法的計數。
  • 現在如果在每個程序中嘗試 initialize WorkManager 超過一次,就會產生 IllegalStateException。這是一項破壞性變更。

修正錯誤

  • work-runtime-ktx 構件中的 WorkRequest.Builder 現在會使用 ListenableWorker。修正 b/117666259
  • 確保 PeriodicWork 的下次執行時間設在未來。修正 b/118204399
  • 移除在應用程式啟動時使用 WorkManager 而可能導致的磁碟 I/O。修正 b/117796731
  • 修正 WorkConstraintsTracker 中的競爭狀況。修正 android-workmanager/issues/56

破壞性 API 變更

  • WorkStatus 已重新命名為 WorkInfo。所有相應的 getStatus 方法變體也已重新命名為對應的 getWorkInfo 變體。
  • ListenableWorker.onStopped() 不再接受用來指出 WorkRequest 是否已取消的布林引數。這項資訊在 WorkManager 中已無區別。
  • androidx.work.test 套件已重新命名為 androidx.work.testing 套件。
  • Constraints 的 setter 不再是公用 API 的一部分。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 先前會傳回陣列,現在則會傳回集合。
  • ListenableWorker.onStartWork() 已重新命名為 ListenableWorker.startWork()
  • WorkStatus 的建構函式不再是公用 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 已分別重新命名為 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • WorkManager 中,enqueuecancel 方法的所有變體現在會傳回新的 Operation 類型。
  • enqueue 的所有變體皆不再接受 WorkRequest 的變數引數。
  • 現在每次程序試著重複 initialize WorkManager 次,都會得到 IllegalStateException

1.0.0-alpha10 版

2018 年 10 月 11 日

這個版本支援由開發人員控管的非同步工作。這個版本有破壞性的 API 變更;請參閱下方的「中斷 API 變更」部分。

我們預期 WorkManager 將進入 Alpha 測試期的最後階段,並在 Beta 版中達到 API 穩定狀態,因此請抽空透過我們的 Issue Tracker 提供意見回饋。

API 變更

  • 移除先前所有 deprecated 方法和類別,特別是預設的 Worker 建構函式。這是一項破壞性的 API 變更。
  • NonBlockingWorker 重新命名為 ListenableWorker,現為未隱藏的公開類別並已開放使用。
    • ListenableWorker 可讓您存取一種抽象的方法 ListenableFuture<Payload> onStartWork(),只要透過主執行緒呼叫即可。您可以選擇採非同步形式啟動與處理工作。完成後,請視情況更新 ListenableFuturealpha02 中的 Futures 套件會提供 ListenableFuture 的參考實作 (請見下方的 WorkManager 部分)。
    • Worker 採用抽象的 Result doWork() 方法,可擴充 ListenableWorker 並如往常一樣運作。
    • 將部分方法和成員從 Worker 重組至 ListenableWorker
    • 針對使用 Kotlin 協同程式 (在穩定版發布後) 和 RxJava2 的 ListenableWorker,我們會盡快提供參考實作。
  • WorkerFactory 介面和 DefaultWorkerFactory 具體實作已併入抽象類別 WorkerFactory。這項實作可確保在其他做法皆無效時,為使用者建立的 WorkerFactory 例項呼叫預設的反射性行為。這是一項破壞性變更。
  • 移除了 WorkManager.synchronous() 和 WorkContinuation.synchronous(),以及所有相關方法。新增了 ListenableFuture<Void>,做為 API 中多種方法的傳回類型。「這是一項破壞性的 API 變更。」
    • 您現在可以使用 ListenableFuture 同步進行擷取與觀測。比方說,WorkManager.enqueue() 原本會傳回 void,現在則會傳回 ListenableFuture<Void>。作業完成後,您可以呼叫 ListenableFuture.addListener(Runnable, Executor)ListenableFuture.get() 來執行程式碼。
    • 請注意,這些 ListenableFuture 不會指出作業成功或失敗,只會指出作業已完成。您還是需要連結 WorkManager 方法,才能掌握這項資訊。
    • 我們會忽略對這些物件的 cancel() 呼叫,原因是這些呼叫容易造成混淆又難以理解 (要取消的是作業還是所產生的工作?)。這屬於 Future 合約範圍內。
    • 為了與同步的 getStatus* 方法維持一致性,我們提供了 ListenableFuture 變體並對傳回 LiveData 的現有變體進行了重新命名,在名稱中明確加上「LiveData」(例如 getStatusesByIdLiveData(UUID))。「這是一項破壞性的 API 變更。」

修正錯誤

  • 修正了 alpha09 中已知的 androidx-annotations.pro 檔案重複問題。如要移除先前版本資訊中提供的解決方法,可以從 Gradle 檔案中刪除 exclude 'META-INF/proguard/androidx-annotations.pro'
  • 新增了 ProGuard 設定,以保留新的 Worker 建構函式。b/116296569
  • 修正競爭狀況在工作經過 REPLACE 處理後可能發生的 NullPointerExceptionb/116253486b/116677275
  • WorkContinuation.combine() 現在接受一個以上 (而非兩個以上) 的 WorkContinuationb/117266752

破壞性 API 變更

  • 移除先前所有 deprecated 方法和類別,特別是預設的 Worker 建構函式。
  • WorkerFactory 介面和 DefaultWorkerFactory 具體實作已併入抽象類別 WorkerFactory
  • 移除了 WorkManager.synchronous()WorkContinuation.synchronous()
  • WorkManager.getStatus*() 方法現在會傳回 ListenableFutureWorkManager.getStatus*LiveData() 則會傳回 LiveData

1.0.0-alpha09 版

2018 年 9 月 19 日

已知問題

如果您遇到以下問題:「找到多個檔案採用獨立於 OS 的路徑『META-INF/proguard/androidx-annotations.pro』」,請在 Gradle 檔案中加入下方內容,做為暫時性解決方案;我們將在 alpha10 中修正這個問題:

Groovy

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

Kotlin

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

修正錯誤

  • 新增了另一項用於解決「100 個工作」錯誤的必備修正項目。b/115560696
  • 新增了一些修正項目,用於解決因競爭狀況而導致的外鍵限制錯誤。b/114705286
  • ConstraintTrackingWorker.onStopped(boolean) 呼叫委派至基礎 Workerb/114125093
  • 針對 Firebase JobDispatcher 強制採用正確的最短輪詢延遲時間。b/113304626
  • 改善了程式庫內部的執行緒保證。
  • 修正在內部刪除重複的 LiveData 時可能發生的問題。

API 變更

  • 您現在可以在執行階段建立自己的 Worker 例項,方法是在 WorkManager.Configuration 中指定 WorkerFactory。備用工廠函式為 DefaultWorkerFactory,與舊版 WorkManager 的行為相符。
    • WorkerNonBlockingWorker 的預設建構函式現已標示為已淘汰。請使用新的建構函式 (Worker(Context, WorkerParameters)) 並呼叫 super(Context, WorkerParameters);日後推出的 WorkManager 版本將移除該預設建構函式。
  • 我們已開始在內部使用新的 ListenableFuture 構件 (不含 Guava 依附元件),並且將在日後推出的 API 版本中導入 ListenableFutures。這項變更將推動在最終取消隱藏 NonBlockingWorker
  • 新增透過 TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID)TestDriver 中觸發定時工作的功能。b/113360060

破壞性變更

  • 淘汰了預設的 WorkerNonBlockingWorker 建構函式。請盡快遷移至新的建構函式。日後的版本將移除預設建構函式。

1.0.0-alpha08 版

2018 年 8 月 27 日

修正錯誤

  • 將 WorkManager 元件明確標示為不具備直接啟動感知特性,以免這些元件在直接啟動期間觸發。日後,我們將提供具有直接啟動感知特性的 WorkManager 版本。b/112665532
  • 修正了重試的工作無法執行的問題。b/112604021
  • 修正了週期性工作無法重複執行的問題 (與上述問題相關)。b/112859683
  • 在應用程式程序已開始執行時遵守輪詢政策。
  • 修正了 Data 中顯示的例外狀況訊息,指出上限為 10 KB。
  • Configuration.setMaxSchedulerLimit(int) 的上限值下修至 50,以因應 JobScheduler 在完成過程中的一些延遲。b/112817355

1.0.0-alpha07 版

2018 年 8 月 16 日

修正錯誤

  • 修正了在 SQL 查詢中可使用負數限制的問題,這類查詢可能會傳回無限量的結果。
  • 已完成執行的工作現在會正確地取消其在其他排程器中的所有待處理副本。原本這些副本會導致 JobScheduler 工作數量超出上限。b/111569265
  • 修正了 ConstraintTracker 中發生的 ConcurrentModificationExceptionb/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String) 的傳回類型註解變更為 @Nullable,而非 @NonNullb/112275229

API 變更

  • Worker 現在擴充了一個新類別 NonBlockingWorker。這不會影響目前使用情形。日後,NonBlockingWorker 將成為 API 全面支援的實體,適用於自訂執行緒解決方案。
  • Data.getBooleanArray(String)Data.getIntArray(String) 的傳回類型註解變更為 @Nullable,而非 @NonNullb/112275229
  • Kotlin 擴充功能:淘汰了 Map.toWorkData() 並新增了頂層 workDataOf(vararg Pair<String, Any?>),以提高與現有 API 的一致性。

1.0.0-alpha06 版

2018 年 8 月 1 日

修正錯誤

  • 防止資料庫在安排工作時間時遭到鎖定。b/111801342
  • 修正在打盹模式中導致 PeriodicWork 無法依時間表執行的錯誤。b/111469837
  • 修正在追蹤限制時的競爭狀況,以避免 WorkManager 異常終止。googlecodelabs/android-workmanager/issues/56
  • 使用 WorkRequest.Builder#build() 時可建立專屬的 WorkRequestb/111408337
  • 只在 WorkRequest 有需要時才啟用 RescheduleReceiverb/111765853

1.0.0-alpha05 版

2018 年 7 月 24 日

API 變更

  • WorkManager.getInstance() 現在加上的註解為 @NonNull,而非 @Nullable。如果採用手動初始化,而單例模式未正確地初始化,該方法將擲回 IllegalStateException這是一項破壞性的 API 變更。
  • 新增了 Configuration.Builder.setMinimumLoggingLevel(int) 這個新的 API,可控管 WorkManager 詳細程度。根據預設,WorkManager 會記錄 Log.INFO 以上級別的資訊。
  • 變更了 Data.getString() 的簽名,使其不再接受預設值 (默示為 null)。這是一項破壞性的 API 變更。
  • 將部分只有內部需要使用的方法標示為 @hide。這包括 Constraints 建構函式、Data.toByteArray()Data.fromByteArray(byte[])這是一項破壞性的 API 變更。

修正錯誤

  • 針對已知的自動備份情況,WorkManager 不會再執行工作,否則可能會導致異常終止。b/110564377
  • 修正了使用 JobScheduler 時發生的 PeriodicWorkRequest 重複排程問題。b/110798652
  • 修正了 PeriodicWorkRequest 在裝置進入打盹狀態後無法正確執行的問題。b/111469837
  • 修正了使用 Firebase JobDispatcher 時發生的初始延遲問題。b/111141023
  • 修正了部分的潛在競爭狀況和時機問題。
  • 正確地釋出了不再需要的 BroadcastReceiver
  • 針對遭到強制關閉並重新啟動的應用程式,盡量提高重新排程成效。
  • 允許在指定的 WorkRequest 之前或之後呼叫 TestScheduler.setAllConstraintsMet(UUID)b/111238024

破壞性變更

  • WorkManager.getInstance() 現在加上的註解為 @NonNull,而非 @Nullable
  • 變更了 Data.getString() 的簽名,使其不再接受預設值 (默示為 null)。
  • 將部分只有內部需要使用的方法標示為 @hide。這包括 Constraints 建構函式、Data.toByteArray()Data.fromByteArray(byte[])

1.0.0-alpha04 版

2018 年 6 月 26 日

修正錯誤

  • 現在當 PeriodicWorkRequest 使用以 AlarmManager 為基礎的實作時,能夠正確地重新排程。
  • 修正在強制停止或重新啟動後,為所有工作站重新排程時可能發生的 ANR 問題。b/110507716
  • 為各個 WorkManager API 新增了是否可為空值註解。b/110344065
  • 記錄在工作站執行期間所發生卻未偵測到的例外狀況。b/109900862
  • 允許遷移破壞性資料庫,以防您日後決定復原至舊版 WorkManager。b/74633270
  • 修正了因建立重複的隱式標記而導致的遷移異常終止問題。這種規定十分罕見,只有使用同一種隱含代碼格式才會發生這個問題。

1.0.0-alpha03 版

2018 年 6 月 19 日

修正錯誤

  • 修正 AlarmManager 型實作方式中的競爭狀況。b/80346526

  • 修正了在裝置重新啟動後使用 JobScheduler 時工作重複的問題。

  • 具備內容 URI 觸發條件的工作現在於重新啟動後仍會保留。b/80234744

  • 說明文件更新。b/109827628b/109758949b/80230748

  • 修正將 WorkRequest 重新加入佇列時發生的異常終止問題。b/109572353

  • 修正了使用 work-runtime-ktx 依附元件時顯示的 Kotlin 編譯器警告。

  • WorkManager 現在採用 Room 1.1.1-rc1 版。

API 變更

  • 新增了 WorkContinuation.getStatuses() 同步版 getStatusesSync()
  • Worker 能夠區別由使用者啟動的取消操作以及由 OS 要求的暫時性停止操作。如果收到任何種類的停止要求,Worker.isStopped() 將傳回 true。如果工作明確遭到取消,Worker.isCancelled() 將傳回 trueb/79632247
  • 針對 API 28 新增了 JobParameters#getNetwork() 支援。這會透過 Worker.getNetwork() 顯示。
  • 新增了 Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit),方便您強制規定可傳送到 JobSchedulerAlarmManager 的工作數量。這有助於防止 WorkManager 佔用所有可用的 JobScheduler 運算單元。
  • 新增了 Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId),以協助定義可供 WorkManager 安全使用的 JobScheduler 工作 ID 範圍。b/79996760
  • Worker.getRunAttemptCount() 會傳回特定 Worker 目前的執行作業計數。b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) 可讓您將不重複的 PeriodicWorkRequest 加入佇列。b/79600647
  • WorkManager.cancelAllWork() 會取消所有 Worker。依附於 WorkManager 的程式庫可以使用 WorkManager.getLastCancelAllTimeMillis() 查詢上次呼叫這個方法的時間,以便對內部狀態進行進一步清理。
  • 新增了 WorkManager.pruneWork(),以便將已完成的工作從內部資料庫中移除。b/79950952b/109710758

行為變更

  • 為所有 WorkRequest 新增了隱式標記,也就是 Worker 的完整類別名稱。這樣一來,即使沒有 tag 或無法使用 id,也能移除 WorkRequestb/109572351

破壞性變更

  • Worker.WorkerResult 已重新命名為 Worker.Result
  • Worker.onStopped 現在有其他 isCancelled 參數,當 Worker 明確取消時,就會設為 true

1.0.0-alpha02 版

2018 年 5 月 24 日

修正錯誤

  • 修正了 State.isFinished()NullPointerExceptionb/79550068
  • 修正了導致 WorkerApplication.onCreate() 時重新排程的問題。b/79660657
  • 修正了排程工作數量可超出 OS 規定上限的問題。b/79497378
  • 將與 Worker 相關聯的 Wake Lock 清理作業移至背景執行緒。
  • 現在當所有待處理工作完成時,AlarmManager 實作會正確地進行清理。
  • 修正了對非英文使用地區造成影響的清理 SQL 查詢。b/80065360
  • Data 中新增了的 float 支援。b/79443878
  • Data.Builder.putAll() 現在會傳回 Builder 的例項。b/79699162
  • 在說明文件中提供更多 Javadoc 和修正項目。b/79691663

API 變更

  • Worker 可對中止處置做出回應。Worker.isStopped() 可用於檢查 Worker 是否已遭中止,Worker.onStopped() 則可用於執行輕量清理作業。
  • Worker.getTags() API 會傳回與 Worker 相關聯的標記 Set
  • 為 API 新增了 javax.time.Duration 多載,可接受時間長度和 TimeUnit 的組合。這受到 @RequiresApi(26) 的防護。
  • WorkManager 擴充功能已從 androidx.work.ktx 套件移至 androidx.work 套件。已淘汰舊的擴充功能,且將在日後推出的版本中移除。
  • 淘汰了 Configuration.withExecutor(),請改用 Configuration.setExecutor()

1.0.0-alpha01 版

2018 年 5 月 8 日

WorkManager 能夠為受到保證、可感知限制的背景工作簡化排程與執行作業。初始版為 1.0.0-alpha01