WorkManager
最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 8 月 7 日 | 2.9.1 版 | - | - | 2.10.0-alpha02 |
宣告依附元件
如要新增 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-alpha02 版本
2024 年 4 月 17 日
發布 androidx.work:work-*:2.10.0-alpha02
。2.10.0-alpha02 版包含這些修訂版本。
API 變更
- 新增透過
WorkManager
中可設定的@RestrictTo
Tracer
發出追蹤記錄時距的功能。(I17d7f、b/260214125) - 新增
Configuration.workerCoroutineContext
以控制執行CoroutineWorker
的調度工具。這有助於完全避免在WorkManager
中使用Dispatchers.Default
。(Icd1b7)。 - 為 Worker 新增自訂例外狀況處理常式 (Ib1b74、b/261190695)
- 現在可以使用
KClass
而不是Class
建構OneTimeWorkRequest.Builder
和PeriodicWorkRequest.Builder
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6) WorkManager
類別已遷移至 Kotlin。現在,會傳回LiveData
、ListenableFuture
或Flow
的方法會提供正確的是否可為空值資訊。可能需要變更客戶的以及原始碼中是否可為空值的假設有誤。(If6757)。
2.10.0-alpha01 版本
2024 年 1 月 24 日
發布 androidx.work:work-*:2.10.0-alpha01
。查看 2.10.0-alpha01 版的修訂項。
新功能
- 開發人員可以透過
Constraints.setRequiredNetworkRequest
方法,將NetworkRequest
指定為 worker 限制。這可更精細地控制這個工作站應執行的網路。
API 變更
- 新增將
NetworkRequest
指定為限制的功能。(Id98a1、b/280634452)
版本 2.9
2.9.1 版
2024 年 8 月 7 日
發布 androidx.work:work-*:2.9.1
。2.9.1 版包含這些修訂版本。
修正錯誤
- 修正
WorkManager
在工作前景類型擁有已撤銷的 Android 14 必備權限時,嘗試重新啟動長時間執行的工作站 (即前景工作站) 所造成的當機問題。(b/333957914)。
2.9.0 版
2023 年 11 月 29 日
發布 androidx.work:work-*:2.9.0
。查看 2.9.0 版的修訂項。
自 2.8.0 版以來的重要變更
- 透過
Flow
開始觀測能力。現在不必透過LiveData
,即可透過 Flow 的WorkManager.getWorkInfosFlow
和類似方法觀察 worker 的進度。 - 現在
WorkManager
會提供先前停止 worker 的提示。您可以透過getStopReason()
方法,從 worker 本身或透過getStopReason()
從WorkInfo
進行查詢。 - 透過
setNextScheduleTimeOverride
精準安排定期工作站。這樣一來,就能動態計算下一個定期工作排程,進而導入自動調整重新整理時間、自訂重試行為等進階功能,或是在使用者每天早上醒來前執行新聞動態消息工作站。ExistingPeriodicWorkPolicy.UPDATE
應與這些技術搭配使用,避免在排定下一個執行中的工作站時取消目前執行中的工作站。 - WorkManager 的執行緒比對正式環境測試。
ExecutorsMode.PRESERVE_EXECUTORS
可用於initializeTestWorkManager
中,以保留Configuration
中設定的執行器,並使用實際的主執行緒。 CoroutineWorker
等協同程式 API 已從其他 Artifact runtime-ktx 移至主要構件 Work-runtime。Work-runtime-ktx 已空白。
API 變更
- 已將「
stopReason
」新增至「WorkInfo
」。工作站執行後,就會提供stopReason
。這對於回報stopReason
報表很有幫助,因為當 worker 停止後,可能很快就會遭到應用程式本身終止。(I21386)。 - 允許透過設定設置
Clock
,並用於驅動 worker 測試的執行順序。(Ic586e)。 - 已將
getStopReason()
方法新增至ListenableWorker
,以說明 worker 停止的原因。(I07060)。 - 新增了
WorkManagerTestInitHelper#closeWorkDatabase()
,避免針對 Closeguard 針對資源外洩的警告。(Ia8d49)。 WorkInfo
的建構函式現已公開,這有助於測試。(Ia00b6、b/209145335)work-runtime-ktx
目前為空白,CoroutineWorker
和其他 Kotlin 專屬公用程式現已納入主要工作執行階段構件中。(I71a9a)。- 新增
setNextScheduleTimeOverride
方法,可準確設定定期工作時間表 (I3b4da) - 新增了
getNextScheduleTimeMillis
,可取得排定執行時間資訊至WorkInfo
。(I797e4)。 - 初始延遲和週期資訊會新增至
WorkInfo
。(I52f2f)。 - 新增透過
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
方法透過流程觀測工作站 (If122a) - 已將缺少的
@RequiresApi(...)
註解新增至Constraints
建構函式和屬性。現在它們與Constraints.Builder
中來自WorkManager
早期版本的 setter 上的對應註解對齊。(I6d7d2)。 WorkManager
現在對內容 URI 工作站設有獨立限制,使其在JobScheduler
中為保證版位提供保證運算單元,以免在高負載情況下更新缺少的內容。您可以透過Configuration.Builder.setContentUriTriggerWorkersLimit
設定限制。(Ic128f)。- 限制已新增至
WorkInfo
。(I162c0)。
2.9.0-rc01 版
2023 年 10 月 18 日
發布 androidx.work:work-*:2.9.0-rc01
。查看 2.9.0-rc01 版的修訂項。
- 自上次 Beta 版發布以來沒有任何變更
2.9.0-beta01 版
2023 年 9 月 6 日
發布 androidx.work:work-*:2.9.0-beta01
。查看 2.9.0-beta01 版的修訂項。
API 變更
- 新增了
WorkInfo.stopReason
和ListenableWorker.stopReason
傳回的停靠站原因常數 (I0cc00)
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
,以說明 worker 停止的原因。(I07060)。 - 新增了
WorkManagerTestInitHelper#closeWorkDatabase()
,避免針對 Closeguard 針對資源外洩的警告。(Ia8d49)。
修正錯誤
- 新增使用
TestDriver
略過overrideNextScheduleTime
的功能,並修正可測試性問題。(Ic2905)。
2.9.0-alpha01 版本
2023 年 6 月 7 日
發布 androidx.work:work-*:2.9.0-alpha01
。查看 2.9.0-alpha01 版的修訂項。
新功能
- 透過
Flow
開始觀測能力。現在不必透過LiveData
,即可透過 Flow 的WorkManager.getWorkInfosFlow
和類似方法觀察 worker 的進度。 - 透過
setNextScheduleTimeOverride
精準安排定期工作站。這樣一來,就能動態計算下一個定期工作排程,進而導入自動調整重新整理時間、自訂重試行為等進階功能,或是在使用者每天早上醒來前執行新聞動態消息工作站。ExistingPeriodicWorkPolicy.UPDATE
應與這些技術搭配使用,避免在排定下一個執行中的工作站時取消目前執行中的工作站。 WorkManager
的執行緒比對正式環境測試。ExecutorsMode.PRESERVE_EXECUTORS
可用於保留Configuration
中設定的執行器,並使用實際的主執行緒。CoroutineWorker
等協同程式 API 已從其他構件work-runtime-ktx
移至主要構件work-runtime
。「work-runtime-ktx
」已留空。
API 變更
WorkInfo
的建構函式現已公開,因此在測試時非常實用。(Ia00b6、b/209145335)work-runtime-ktx
現為空白,CoroutineWorker
和其他 Kotlin 專屬公用程式現已可在主要work-runtime
構件中使用。(I71a9a)。- 新增
setNextScheduleTimeOverride
方法,可準確設定定期工作時間表 (I3b4da) getEarliestRunTimeMillis
已重新命名為getNextScheduleTimeMillis
。(I2bd7a)。- 下次預定執行時間資訊會加到
WorkInfo
中。(I797e4)。 - 初始延遲和週期資訊會新增至
WorkInfo
。(I52f2f)。 - 新增透過
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
方法透過流程觀測工作站 (If122a) - 已將缺少的
@RequiresApi(...)
註解新增至限制建構函式和屬性。現在它們與Constraints.Builder
中來自WorkManager
早期版本的 setter 上的對應註解對齊。(I6d7d2)。 WorkManager
現在對內容 URI 工作站設有獨立限制,使其在JobScheduler
中為保證版位提供保證運算單元,以免在高負載情況下更新缺少的內容。您可以透過Configuration.Builder.setContentUriTriggerWorkersLimit
設定限制。(Ic128f)。- 限制已新增至
WorkInfo
。(I162c0)。
2.8 版本
2.8.1 版
2023 年 3 月 22 日
發布 androidx.work:work-*:2.8.1
。查看 2.8.1 版的修訂項。
修正錯誤
- 修正
RescheduleReceiver
中先前無法正確處理兩個同時廣播訊息的 ANR。(b/236906724)。
2.8.0 版
2023 年 2 月 8 日
發布 androidx.work:work-*:2.8.0
。查看 2.8.0 版的修訂項。
自 2.7.0 版以來的重要異動
新功能
- 新增能以非干擾方式更新
WorkRequests
的功能,且可保留原始佇列時間、鏈結等。如要進一步瞭解這項功能,以及WorkManager.updateWork
和ExistingPeriodicWorkPolicy.UPDATE
的 Javadocs,請參閱詳細的網誌文章。
API 變更
- 新增
WorkManager.updateWork
,可在更新工作的同時保留原始佇列時間和鏈結 (I9a248、b/219446409)。 - 新增
ExistingPeriodicWorkPolicy.UPDATE
。這項政策可讓您依據名稱更新週期性工作。這類似於現有的REPLACE
,但干擾程度較低:這項政策不會取消執行中的工作站,並可以保留佇列時間,初始延遲與期間將以原始佇列時間計算,而非更新時間。我們已淘汰REPLACE
,因REPLACE
和UPDATE
名稱太過類似,可能會造成混淆。如果您仍想保留之前的REPLACE
語意,可使用新加入的CANCEL_AND_REENQUEUE
,這和REPLACE
功能相同 (I985ed、b/219446409)。 - 新增功能:可透過 setSchedulingExceptionHandler 攔截提供
Consumer<Throwable>
的排程例外狀況。 - 新增可透過 setInitializationExceptionHandler 提供
Consumer<Throwable>
的功能,在初始化 WorkManager 時可判斷是否發生問題。 OneTimeWorkRequest
和PeriodicWorkRequest
的內嵌輔助程式已從androidx.work:work-runtime-ktx
移到androidx.work:work-runtime
(I0010f、b/209145335)- 新增輔助方法
WorkQuery.fromIds
、WorkQuery.fromStates
、WorkQuery.fromUniqueWorkNames
、WorkQuery.fromTags
,以便直接建立WorkQuery
(b/199919736) (If48f2、b/199919736) - 將
getForegroundInfo
新增至Worker
(Ic1ead)。 - RxJava 2 和 RxJava 3 的
RxWorker
現在都具有會傳回Completable
的setForeground
,可取代會傳回ListenableFuture
的setForegroundInfoAsync
- RxJava 2 和 RxJava 3 的
RxWorker
都具有會傳回Single
的getForegroundInfo
,可取代會傳回ListenableFuture
的getForegroundInfoAsync
(b/203851459)。 - 現在可以直接建構限制條件,不必使用
Constraints.Builder
,這對 Kotlin 使用者來說相當便利 (Idc390、b/137568653)。 - 新增查看
WorkManager
是否已初始化的功能。此外,我們也為程式庫開發人員增設了新的getConfiguration()
API,方便他們取得初始化WorkManager
所用的設定 (I6eff3、b/212300336)。
修正錯誤
- 之前 greedy 排程器會讓工作站在負載量不足的情況下,無法立即執行。這個問題現已修正。(I9686b、b/248111307)。
- 將
@RequiresPermission
新增至需要為 SDK 33 以上版本授予POST_NOTIFICATIONS
權限的 API (Ie542e、b/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 版的修訂項。
修正錯誤
- 之前 greedy 排程器會讓工作站在負載量不足的情況下,無法立即執行。這個問題現已修正。(I9686b、b/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.updateWork
或WorkManager.enqueueUniquePeriodicWork
更新工作站,工作站便會有多代版本。請注意,工作站目前正在執行時,如果在工作站執行期間發生更新,這個方法可能會從目前執行的工作站傳回較新的世代版本。(I665c5、b/219446409) (I128a9、b/219446409) - 已新增
InitializationExceptionHandler
例外狀況處理常式,可用於判斷嘗試初始化WorkManager
時是否發生問題 (I061de)。
2.8.0-alpha03 版
2022 年 8 月 10 日
發布 androidx.work:work-*:2.8.0-alpha03
。2.8.0-alpha03 版包含以下修訂項目。
新功能
- 我們新增了能以非干擾方式更新
WorkRequests
的功能,能夠保留原始佇列時間、鏈結等項目。詳情請看WorkManager.updateWork
和ExistingPeriodicWorkPolicy.UPDATE
。
API 變更
- 新增
WorkManager.updateWork
,可在更新工作的同時保留原始佇列時間和鏈結 (I9a248、b/219446409)。 - 新增
ExistingPeriodicWorkPolicy.UPDATE
。這項政策可以讓您依據名稱來更新週期性工作。這和目前已有的REPLACE
十分相似,但干擾程度較低:這個政策不會取消執行中的工作站,並可以保留佇列時間,初始延遲與期間將以原始佇列時間計算,而非更新時間,我們已淘汰REPLACE
,以便防止REPLACE
和UPDATE
由於名稱太過類似而造成混淆。如果您依然想保留之前的REPLACE
語意,不妨使用新加入的CANCEL_AND_REENQUEUE
,這和REPLACE
功能相同 (I985ed、b/219446409)。 - 新增可藉由定義
SchedulingExceptionHandler
攔截排程例外狀況的功能 (I033eb)。 OneTimeWorkRequest
和PeriodicWorkRequest
的內嵌輔助程式已從androidx.work:work-runtime-ktx
移到androidx.work:work-runtime
(I0010f、b/209145335)
修正錯誤
- 將
@RequiresPermission
新增至需要為 SDK 33 以上版本授予 POST_NOTIFICATIONS 權限的 API。(Ie542e、b/238790278)。
2.8.0-alpha02 版
2022 年 4 月 6 日
發布 androidx.work:work-*:2.8.0-alpha02
。查看 2.8.0-alpha02 版的修訂項。
API 變更
- 現在可以直接建構限制條件,而不必使用建構工具,對 Kotlin 使用者來說相當便利 (Idc390,b/137568653)。
- 新增查看
WorkManager
是否已初始化的功能。此外,我們也為程式庫開發人員增設了新的getConfiguration()
API,方便他們取得初始化WorkManager
所用的設定 (I6eff3,b/212300336)。
2.8.0-alpha01 版
2022 年 1 月 12 日
發布 androidx.work:work-*:2.8.0-alpha01
。查看 2.8.0-alpha01 版的修訂項。
API 變更
- 已新增輔助方法
WorkQuery.fromStates
、WorkQuery.fromUniqueWorkNames
、WorkQuery.fromTags
,以便直接建立 WorkQuery (If48f2、b/199919736)。 - 為未來的 SDK 新增實驗性 BuildCompat 方法 (Iafd82、b/207528937)
- 新增
getForegroundInfo
到Worker
(Ic1ead)。 - 已新增輔助程式
WorkQuery.fromIds
,以便直接透過 ID 建立 WorkQuery (Ie5bdf、b/199919736)。 - RxWorker 現在可使用回傳
Completable
的setForeground
,取代回傳ListenableFuture
的setForegroundInfoAsync
(I85156)。 - RxJava 2 的 RxWorker 現在可使用回傳
Single
的getForegroundInfo
,取代回傳ListenableFuture
的getForegroundInfoAsync
(I21c91、b/203851459)。 - RxJava 3 的 RxWorker 現在可使用回傳
Single
的getForegroundInfo
,取代回傳ListenableFuture
的getForegroundInfoAsync
(I1ca8a)。 - RxWorker 現在可使用回傳
Completable
的setForeground
,取代回傳ListenableFuture
的setForegroundInfoAsync
(I992a3、b/203851459)。
修正錯誤
- 使用
suspendCancellableCoroutine
時,取消CoroutineScope
到ListenableFuture
的取消作業 (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 版的修訂項。
新功能
透過 WorkManager
2.6.0-alpha02
:新增支援任何程序的工作站。(Iaf200)從 WorkManager
2.6.0-alpha02
起:新增RemoteCoroutineWorker
來導入RemoteListenableWorker
,可繫結至遠端程序。(I30578)
API 變更
- 透過 WorkManager
2.6.0-alpha02
:新增對TEMPORARILY_UNMETERED
的網路限制支援功能 (I08d5e) - 透過 WorkManager
2.6.0-alpha02
:setProgressAsync()
的多程序工作站支援。(Ib6d08) - 透過 WorkManager
2.6.0-alpha02
:將WorkManagerInitializer
設為公開,讓其他androidx.startup.Initializer
能夠將其做為依附元件。(I5ab11)
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/1730694RemoteListenableWorker
現已與RemoteWorkerService
解除繫結,以便RemoteWorkerService
正確清理資料。aosp/1743817ForceStopRunnable
現在只能在主要應用程式處理程序中執行。這是一個最佳化程序,可避免使用多個程序的應用程式資源爭用。aosp/1749180、aosp/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 版的修訂項。
新功能
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
成果。這會將工作要求排程統合為單一程序,進而提升效能。- 如要使用
work-multiprocess
,請定義下列項目的依附元件:implementation "androidx.work:work-multiprocess:2.5.0"
- 使用 Configuration.Builder.setDefaultProcessName(String) 指定主要程序。
- 使用
work-multiprocess
時,您也必須使用 RemoteWorkManager 來管理WorkRequest
。RemoteWorkManager 一律會連線至指定的程序。過程中的排程器也會按照指定的程序執行。
- 如要使用
- 有時候,
ActivityManager
無法為JobService
例項執行例項化,以啟動工作。導致基礎工作因平台錯誤而遭到捨棄。WorkManager
現在可以確保當Application
透過協調工作初始化時,每個WorkRequest
都有備份工作。這可大幅提升工作執行可靠性。(b/172475041、aosp/1489577)。 WorkManager
會縮短WorkRequest
在WorkRequest
完成後追蹤的緩衝時間長度,以減少資料庫的成長。時間長度為7
天前。縮減為1
天 + keepResultsForAtLeast 持續時間 (aosp/1419708)。TestListenableWorkerBuilder
現在支援修訂後的類別 (適用於ListenableWorker
),以便簡化測試。(aosp/1443299、b/169787349)- WorkManager 檢查器現已開放使用 Android Studio Arctic Fox 使用。
2.5.0-rc01 版
2021 年 1 月 13 日
發布 androidx.work:work-*:2.5.0-rc01
。2.5.0-rc01 版包含此連結所列的修訂項目。
修正錯誤
- 已修正在使用
WorkQuery
式 API 後,實體在更新後無法正確失效getWorkInfosLiveData
的錯誤。(aosp/1540566、b/173769028) - 修正在少數情況下,資料庫交易未標示為成功的錯誤。這會導致部分 Motorola 裝置發生問題。(aosp/1535368、b/175944460)
- 已修正在取消從程序中解除繫結時略過
NoSuchElementException
的錯誤。(aosp/1530589) - 改善
ConstraintTrackingWorker
以停止在ListenableWorker
已停止的情況下停止該服務。(aosp/1496844、b/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/172475041、aosp/1489577)。 - 針對平台錯誤新增解決方案,該錯誤會導致在使用
setForeground*
API 時停用前景服務。(b/170924044、aosp/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/1455618、b/170273988)。
2.5.0-alpha03 版
2020 年 10 月 14 日
發布 androidx.work:work-*:2.5.0-alpha03
。查看 2.5.0-alpha03 版的修訂項。
API 變更
TestListenableWorkerBuilder
和TestWorkerBuilder
不會使用原始類型。(I883ad、b/169787349)
修正錯誤
- 使用
ApplicationInfo
來判斷預設應用程式程序的名稱 (b/168716641、aosp/1429950)。 - 修正
RemoteWorkManager
和RemoteWorkContinuation
的顯示規則。這些 API 不會再標示為@Restricted
。(aosp/1432091) - 修正
:work:work-multiprocess
的保護措施規則。(aosp/1432091) - 針對繫結於前景服務的長時間工作,改善其通知生命週期。(b/168502234、aosp/1431331)。
2.5.0-alpha02 版
2020 年 9 月 16 日
發布 androidx.work:work-*:2.5.0-alpha02
。2.5.0-alpha02 版包含此連結所列的修訂項目。
新功能
- 將 API 新增至 WorkQuery 即可使用
id
來查詢WorkInfo
。(aosp/1412372、b/157335295) - WorkManager 能進一步支援使用多個程序與新成果 (
androidx.work:work-multiprocess:*
) 的應用程式。這項新成果可協助解決大型應用程式遇到的一些問題:- 一般來說,WorkManager 必須在每個應用程式程序中進行初始化。但也不是很棒的情況,因為 SQLite 內容的數量會增加,進而造成其他問題。WorkManager 現已推出新 API,可用來指定使用
Configuration#setDefaultProcessName(processName)
指定的「主要」應用程式程序。processName
是完整的程序名稱,格式為packageName:processName
(例如com.example:remote
)。 - 新 API:
RemoteWorkManager
和RemoteWorkContinuation
可進行enqueue
、cancel
和query
工作要求。這些 API「不」包含LiveData
變體,以避免多個程序中的 SQLite 爭用情況。所有傳送至enqueue
、cancel
和query
的呼叫都會透過 AIDL 轉送至primary
應用程式程序,並傳回流動ListenableFuture
。 (aosp/1392657,aosp/1411210,aosp/1412215,aosp/1417713 )
- 一般來說,WorkManager 必須在每個應用程式程序中進行初始化。但也不是很棒的情況,因為 SQLite 內容的數量會增加,進而造成其他問題。WorkManager 現已推出新 API,可用來指定使用
API 變更
- 針對沒有未完成依附元件的
WorkRequest
,WorkManager 現在會更積極修剪已完成的該項目。緩衝時間長度已從7
天變更為1
天 (aosp/1419708)。
修正錯誤
- WorkManager 會主動協調工作,因此
WorkManager
初始化時,WorkRequest
和JobScheduler
工作也會保持同步。(aosp/1412794、b/166292069)
2.5.0-alpha01 版
2020 年 8 月 19 日
發布 androidx.work:work-*:2.5.0-alpha01
。查看 2.5.0-alpha01 版的修訂項。
新功能
- 內部 API 相關變更,讓我們日後能透過
WorkManager
提供更優質的工具。敬請密切關注最新消息。
修正錯誤
- 在部分裝置上追蹤網路狀態時,必須處理
SecurityException
。(aosp/1396969)
外部貢獻
- 修正 Zac Sweers (github/43) 的
ArrayCreatingInputMerger
說明文件。
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/1253230、b/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/134613984、aosp/1199640)。提供可新增自訂
RunnableScheduler
的功能,以追蹤日後必須執行的 WorkRequest。這個名稱會顯示在處理中的排程器中。(aosp/1203944)開始支援在使用
DelegatingWorkerFactory
時動態新增委派目標工廠。 (b/156289105、aosp/1309745)讓
BATTERY_NOT_LOW
限制條件的追蹤方式更符合平台。(aosp/1312583)處理中排程器現在會使用更完善的 API 來判斷程序的名稱。這項功能可以有效支援使用多個程序的應用程式。(aosp/1324732)
可強制執行的新 Lint 規則:
- 使用
setForegroundAsync()
API 時適用的foregroundServiceType
。(b/147873061、aosp/1215915)。 - 指定 WorkManager 在直接使用 JobService API 時應使用的 JobScheduler ID。aosp/1223567
- 新增 Lint 規則,確保在使用
WorkerFactory
時,ListenableWorker
現已採用public
。(aosp/1291262)
- 使用
如果對
setForegroundAsync()
的呼叫並未在完成ListenableWorker
前結束,系統會在傳回的ListenableFuture
以IllegalStateException
發出信號。(aosp/1262743)修正前景
Worker
停止後,ForegroundService
不會停止運作的問題。(b/155579898、aosp/1302153)。修正錯誤:
WorkManager
嘗試執行繫結至前景服務的Worker
的多個例項時,系統會發生錯誤。(b/156310133、aosp/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-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-beta01
和 androidx.work:work-testing:2.4.0-beta01
。查看 2.4.0-beta01 版的修訂項。
修正錯誤
- 修正前景
Worker
停止後,ForegroundService
不會停止運作的問題。(b/155579898、aosp/1302153)。 - 修正錯誤:
WorkManager
嘗試執行繫結至前景服務的Worker
的多個例項時,系統會發生錯誤。(b/156310133、aosp/1309853) - 新增使用
DelegatingWorkerFactory
的動態新增係數來委派代表。(b/156289105、aosp/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
的工廠方法withStates
、withTags
和withUniqueWorkNames
已重新命名為fromStates
、fromTags
和fromUniqueWorkNames
。(aosp/1280287)
修正錯誤
- 在追蹤裝置的網路狀態時忽略
SecurityException
。(b/153246136、aosp/1280813)。
2.4.0-alpha02 版
2020 年 4 月 1 日
發布 androidx.work:work-*:2.4.0-alpha02
。2.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/1253230、b/143847546)如果對
setForegroundAsync()
的呼叫並未在完成ListenableWorker
前結束,系統會在傳回的ListenableFuture
以IllegalStateException
發出信號。(aosp/1262743)
修正錯誤
- 已修正檢查
PeriodicWorkRequest
限制時間間隔的 Lint 規則。(aosp/1254846、b/152606442)。
2.4.0-alpha01 版
2020 年 3 月 4 日
發布 androidx.work:work-*:2.4.0-alpha01
。2.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/147873061、aosp/1215915)。 - 指定
WorkManager
在使用JobService
API 時應使用的JobScheduler
ID。(aosp/1223567)
- 使用
API 變更
新增與
APPEND
類似的ExistingWorkPolicy.APPEND_OR_REPLACE
,但會取代已取消或失敗的鏈結。 (b/134613984、aosp/1199640)提供新增自訂
RunnableScheduler
的功能,以追蹤日後必須執行的WorkRequest
。這個名稱會顯示在處理中的排程器中。(aosp/1203944)
修正錯誤
- 已於
RxWorker
淘汰setProgress()
,因為該物件先前會傳回Single<Void>
這個不支援的類型。新增了setCompletableProgress()
這個新 API,傳回的結果改為Completable
;同時也加入了新的 Lint 規則,可協助遷移至新的 API (b/150080946、aosp/1242665)。
2.3.4 版
2.3.4 版
2020 年 3 月 18 日
發布 androidx.work:work-*:2.3.4
。查看 2.3.4 版的修訂項。
修正錯誤
- 10 分鐘的執行時間過後,有個錯誤會引發多個長時間執行的
Worker
例項運作,現在這個錯誤已修正。(aosp/1247484、b/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 版的修訂項。
修正錯誤
- 修正
Worker
中斷的問題,會導致該問題重新排程。(b/150325687、aosp/1246571)。
2.3.2 版
2.3.2 版
2020 年 2 月 19 日
發布 androidx.work:work-*:2.3.2
。查看 2.3.2 版的修訂項。
修正錯誤
- 修正 WorkManagerr 在極少數情況下超過 100 項工作限制的問題。(aosp/1226859、b/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/1218539、b/147249312)。 WorkManager
現在需要androidx.sqlite:sqlite-framework:2.1.0
的穩定性。(aosp/1217729)- 新增 Lint 規則,確保在
ForegroundInfo
中使用foregroundServiceType
時,是在AndroidManifest.xml
中指定foregroundServiceType
(aosp/1214207、b/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-ktx
的api
依附元件 (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.WorkManagerInitializer
從AndroidManifest.xml
中移除 (aosp/1167007)。 - 在下列情況下加入了 Lint 警告:
enqueue()
用於PeriodicWorkRequest
而非enqueueUniquePeriodicWork()
。(aosp/1166032)
API 變更
ForegroundInfo
現在需要指定在使用ListenableWorker.setForegroundAsync()
時要使用的notificationId
。這是一項破壞性變更。這樣一來,您就可以同時執行多個長時間的Worker
。WorkManager
也會更妥善地管理所提供Notification
的生命週期。 (b/145473554、aosp/1181208、asop/1181216、asop/1183577)
修正錯誤
- 已修正 AlarmManager 實作錯誤,無法正確清除鬧鐘 (aosp/1156444)。
- 修正
WorkRequest
空白清單會導致建立WorkContinuation
鏈不正確的問題。(b/142835274、aosp/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 可讓您輕鬆取消Notification
的WorkRequest
。我們預計會在 2.3.0 版中與新的前景 API 搭配使用。 - WorkManager 現在會使用
androidx.room:*:2.2.0
穩定版。
API 變更
- 將
ForegroundInfo.getNotificationType()
重新命名為ForegroundInfo.getForegroundServiceType()
,使其與基礎平台 API 更加一致。(b/142729893、aosp/1143316)。
修正錯誤
- 修正在交易以外對
setTransactionSuccessful()
發出不必要的呼叫時,所導致的錯誤。進行罕見的遷移作業。(b/142580433、aosp/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)Data
的containsKey()
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 如要設定專案進行初始化,請按照下列指示操作:
- 停用自動初始化工具。
- 在自訂
Application
物件中導入Configuration.Provider
。 - 將
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
構件中使用TestWorkerBuilder
和TestListenableWorkerBuilder
來建立可測試單位的Worker
和ListenableWorker
類別。- 請注意,
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
的例項時,會使用正確的WorkerFactory
。b/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 如要設定專案進行初始化,請按照下列指示操作:
- 停用自動初始化工具。
- 在自訂
Application
物件中導入Configuration.Provider
。 - 將
WorkManager.getInstance()
的所有參照變更為WorkManager.getInstance(Context)
。在本次變更中,我們已淘汰WorkManager.getInstance()
。就算您未進行隨選初始化,還是可以放心呼叫新的WorkManager.getInstance(Context)
替換作業。
- 新增在
work-testing
構件中使用TestWorkerBuilder
和TestListenableWorkerBuilder
來建立可測試單位的Worker
和ListenableWorker
類別。- 請注意,
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 之前的依附元件
參考文件: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擲回未勾選
Exception
的Worker
現已正確標示為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) 以下版本裝置中的
NullPointerException
。b/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) 以下版本的裝置上發生的
ConcurrentModificationException
。b/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
合併至Result
。Result
現在是「密封類別」,內含三種具體實作,可透過Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
) 和Result.retry()
取得。您的ListenableFuture
現在會產生Result
,而非Payload
。Worker
沒有輸出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
類別和其參照方法不再提供公共使用。這是一項破壞性變更。- 移除了
WorkManager
、WorkContinuation
和OneTimeWorkRequest
中的其餘變數引數方法,以簡化 API。如要修正任何版本問題,可以使用Arrays.asList(...)
包裝現有的變數引數。我們仍會納入每種方法的單一引數版本。這是一項破壞性變更。 - 移除
WorkContinuation.combine(OneTimeWorkRequest, *)
變數。這些變體提供的 API 較為複雜難懂;現有的combine
方法比較容易理解。這是一項破壞性變更。
修正錯誤
- Marchmallow 之前的實作版本現在能夠更穩定地從現行工作程序終止的狀況中恢復。
- 透過
observeForever
觀測到的LiveData
可使用 WorkManager 追蹤。這是將 Room 程式庫修正項目向後移植。b/74477406 - 如果序列化物件超出大小上限,
Data.Builder.build()
現在會擲回例外狀況。過去,這只會發生在背景執行緒,因此您無法做出適當處理。 - 進一步區分已停止與已取消的工作;
getWorkInfoById()
在ListenableWorker.onStopped()
期間會傳回具備CANCELLED
State
的WorkInfo
。 - 在
ListenableWorker
中將null
Result
視作失敗。b/120362353 - 對搭載 API 24 且不時擲回
IllegalArgumentException
的 Shield Tablets 做出推測性修正。b/119484416
破壞性 API 變更
- 移除了對 Firebase JobDispatcher 的支援,原因是該程式庫即將遭到淘汰。換句話說,隨著我們邁入 Beta 版,
work-firebase
構件將不再更新。我們日後會考慮增設替代選項。 - 將
Payload
合併至Result
。Result
現在是「密封類別」,內含三種具體實作,可透過Result.success()
(或Result.success(Data)
)、Result.failure()
(或Result.failure(Data)
) 和Result.retry()
取得。您的ListenableFuture
現在會產生Result
,而非Payload
。Worker
沒有輸出Data
的 getter 和 setter 方法。 - 新增了
Operation.await()
和ListenableFuture.await()
Kotlin 擴充功能方法。 Operation.getException()
已重新命名為Operation.getThrowable()
。ContentUriTriggers
類別和其參照方法不再提供公共使用。- 移除了
WorkManager
、WorkContinuation
和OneTimeWorkRequest
中的其餘變數引數方法,以簡化 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
中,enqueue
和cancel
方法的所有變體現在會傳回新的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
中,enqueue
和cancel
方法的所有變體現在會傳回新的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()
,只要透過主執行緒呼叫即可。您可以選擇採非同步形式啟動與處理工作。完成後,請視情況更新ListenableFuture
。alpha02
中的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
處理後可能發生的NullPointerException
。b/116253486 和 b/116677275 WorkContinuation.combine()
現在接受一個以上 (而非兩個以上) 的WorkContinuation
。b/117266752
破壞性 API 變更
- 移除先前所有
deprecated
方法和類別,特別是預設的Worker
建構函式。 WorkerFactory
介面和DefaultWorkerFactory
具體實作已併入抽象類別WorkerFactory
。- 移除了
WorkManager.synchronous()
和WorkContinuation.synchronous()
。 WorkManager.getStatus*()
方法現在會傳回ListenableFuture
。WorkManager.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)
呼叫委派至基礎Worker
。b/114125093 - 針對 Firebase JobDispatcher 強制採用正確的最短輪詢延遲時間。b/113304626
- 改善了程式庫內部的執行緒保證。
- 修正在內部刪除重複的
LiveData
時可能發生的問題。
API 變更
- 您現在可以在執行階段建立自己的
Worker
例項,方法是在WorkManager.Configuration
中指定WorkerFactory
。備用工廠函式為DefaultWorkerFactory
,與舊版 WorkManager 的行為相符。Worker
和NonBlockingWorker
的預設建構函式現已標示為已淘汰。請使用新的建構函式 (Worker(Context, WorkerParameters)
) 並呼叫super(Context, WorkerParameters)
;日後推出的 WorkManager 版本將移除該預設建構函式。
- 我們已開始在內部使用新的
ListenableFuture
構件 (不含 Guava 依附元件),並且將在日後推出的 API 版本中導入 ListenableFutures。這項變更將推動在最終取消隱藏NonBlockingWorker
。 - 新增透過
TestDriver.setInitialDelayMet(UUID)
和TestDriver.setPeriodDelayMet(UUID)
在TestDriver
中觸發定時工作的功能。b/113360060
破壞性變更
- 淘汰了預設的
Worker
和NonBlockingWorker
建構函式。請盡快遷移至新的建構函式。日後的版本將移除預設建構函式。
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
中發生的ConcurrentModificationException
。b/112272753 - 將
Data.getBooleanArray(String)
和Data.getIntArray(String)
的傳回類型註解變更為@Nullable
,而非@NonNull
。b/112275229
API 變更
Worker
現在擴充了一個新類別NonBlockingWorker
。這不會影響目前使用情形。日後,NonBlockingWorker
將成為 API 全面支援的實體,適用於自訂執行緒解決方案。- 將
Data.getBooleanArray(String)
和Data.getIntArray(String)
的傳回類型註解變更為@Nullable
,而非@NonNull
。b/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()
時可建立專屬的WorkRequest
。b/111408337 - 只在
WorkRequest
有需要時才啟用RescheduleReceiver
。b/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/109827628、b/109758949、b/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()
將傳回true
。b/79632247- 針對 API 28 新增了 JobParameters#getNetwork() 支援。這會透過
Worker.getNetwork()
顯示。 - 新增了
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
,方便您強制規定可傳送到JobScheduler
或AlarmManager
的工作數量。這有助於防止WorkManager
佔用所有可用的JobScheduler
運算單元。 - 新增了
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
,以協助定義可供WorkManager
安全使用的JobScheduler
工作 ID 範圍。b/79996760 Worker.getRunAttemptCount()
會傳回特定Worker
目前的執行作業計數。b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
可讓您將不重複的PeriodicWorkRequest
加入佇列。b/79600647WorkManager.cancelAllWork()
會取消所有Worker
。依附於WorkManager
的程式庫可以使用WorkManager.getLastCancelAllTimeMillis()
查詢上次呼叫這個方法的時間,以便對內部狀態進行進一步清理。- 新增了
WorkManager.pruneWork()
,以便將已完成的工作從內部資料庫中移除。b/79950952、b/109710758
行為變更
- 為所有
WorkRequest
新增了隱式標記,也就是Worker
的完整類別名稱。這樣一來,即使沒有tag
或無法使用id
,也能移除WorkRequest
。b/109572351
破壞性變更
Worker.WorkerResult
已重新命名為Worker.Result
。Worker.onStopped
現在有其他isCancelled
參數,當Worker
明確取消時,就會設為true
。
1.0.0-alpha02 版
2018 年 5 月 24 日
修正錯誤
- 修正了
State.isFinished()
的NullPointerException
。b/79550068 - 修正了導致
Worker
在Application.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
。