WorkManager
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
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 には、これらの commit が含まれています。
バージョン 2.9.1 以降の重要な変更
WorkManager
の Jobs にトレースタグを追加しました。これにより、実行中の Worker の名前が含まれるため、「adb shell dumpsys jobscheduler」がわかりやすくなりました。WorkManager
の主要な領域の周囲にもトレース セクションが追加されています。CoroutineWorker
が実行されるディスパッチャを制御するためにConfiguration.workerCoroutineContext
を追加しました。- デベロッパーは、
Constraints.setRequiredNetworkRequest
メソッドを使用して、ワーカーの制約としてNetworkRequest
を指定できます。これにより、このワーカーがどのネットワークを実行するかをきめ細かく制御できます。 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 には、こちらの commit が含まれています。
バージョン 2.10.0-beta01
2024 年 10 月 2 日
androidx.work:work-*:2.10.0-beta01
がリリースされました。バージョン 2.10.0-beta01 には、これらの commit が含まれています。
バージョン 2.10.0-alpha04
2024 年 9 月 18 日
androidx.work:work-*:2.10.0-alpha04
がリリースされました。バージョン 2.10.0-alpha04 に含まれる commit はこちらをご覧ください。
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 に含まれる commit はこちらをご覧ください。
新機能
WorkManager
の Jobs にトレースタグを追加しました。これにより、実行中の Worker の名前が含まれるため、「adb shell dumpsys jobscheduler」がわかりやすくなりました。WorkManager
の主要な領域の周囲にもトレース セクションが追加されています。
API の変更
- WorkManager 2.10.0 が SDK 35 でコンパイルされるようになりました。
- 「short service」タイプと「data sync」タイプのフォアグラウンド ワーカーがタイムアウトして、
WorkManager
がstopSelf()
を呼び出さなかった場合に ANR が発生する問題を修正。この修正は、フォアグラウンド サービス タイプが導入された API 34 および 35 を搭載したデバイスにのみ適用されます。(ca06b2、b/364508145) WorkerFactory
の使用時にWorker
がバインドするリモート プロセスを切り替えることができる新しいWorkerParameters
API。(Ibdc8a、Ie8a90、I7373f)。
バグの修正
WorkManager
が、作業のフォアグラウンド タイプで Android 14 の前提条件となる権限が取り消されている場合に、長時間実行ワーカー(フォアグラウンド ワーカー)の再起動を試行してクラッシュする問題を修正しました。(b/333957914)。- 新しいプラットフォーム API へのアクセスの手動アウトラインを削除しました。これは、AGP 7.3 以降(R8 バージョン 3.3 など)で R8 を使用する場合、および AGP 8.1 以降(D8 バージョン 8.1 など)を使用するすべてのビルドで、API モデリングによって自動的に行われるためです。AGP を使用していないクライアントには、D8 バージョン 8.1 以降に更新することが推奨されます。詳しくは、こちらの記事をご覧ください。(Ia60e0、b/345472586)。
バージョン 2.10.0-alpha02
2024 年 4 月 17 日
androidx.work:work-*:2.10.0-alpha02
がリリースされました。バージョン 2.10.0-alpha02 には、これらの commit が含まれています。
API の変更
WorkManager
で構成可能な@RestrictTo
Tracer
を介してトレーススパンを出力する機能を追加しました。(I17d7f、b/260214125)。CoroutineWorker
が実行されるディスパッチャを制御するために、Configuration.workerCoroutineContext
が追加されました。WorkManager
でのDispatchers.Default
の使用を完全に回避するのに役立ちます。(Icd1b7)- Worker のカスタム例外ハンドラを追加しました。(Ib1b74、b/261190695)
OneTimeWorkRequest.Builder
とPeriodicWorkRequest.Builder
を、Class
の代わりにKClass
を使用して作成できるようになりました:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6)WorkManager
クラスを Kotlin に移行しました。LiveData
、ListenableFuture
、Flow
を返すメソッドが、正しい null 可能性情報を提供できるようになりました。null 可能性の想定が正しくない場合、クライアントのソースコードの変更が必要になることがあります。(If6757)
バージョン 2.10.0-alpha01
2024 年 1 月 24 日
androidx.work:work-*:2.10.0-alpha01
がリリースされました。バージョン 2.10.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
- デベロッパーは、
Constraints.setRequiredNetworkRequest
メソッドを使用して、ワーカーの制約としてNetworkRequest
を指定できます。これにより、このワーカーがどのネットワークを実行するかをきめ細かく制御できます。
API の変更
- 制約として
NetworkRequest
を指定する機能を追加しました。(Id98a1、b/280634452)
バージョン 2.9
バージョン 2.9.1
2024 年 8 月 7 日
androidx.work:work-*:2.9.1
がリリースされました。バージョン 2.9.1 に含まれる commit については、こちらをご覧ください。
バグの修正
- 処理のフォアグラウンド タイプに Android 14 の前提条件の権限が取り消された場合に、
WorkManager
が長時間実行ワーカー(フォアグラウンド ワーカー)を再起動しようとすると発生するクラッシュを修正しました。(b/333957914)
バージョン 2.9.0
2023 年 11 月 29 日
androidx.work:work-*:2.9.0
がリリースされました。バージョン 2.9.0 に含まれる commit については、こちらをご覧ください。
2.8.0 以降の重要な変更
Flow
によるオブザーバビリティ。ワーカーの進行状況をLiveData
ではなく、Flow のWorkManager.getWorkInfosFlow
などのメソッドで確認できるようになりました。WorkManager
は、ワーカーが停止した理由のヒントを提供するようになりました。getStopReason()
メソッドを介してワーカー自体から、またはgetStopReason()
を介してWorkInfo
からクエリできます。setNextScheduleTimeOverride
による定期的なワーカーの正確なスケジュール設定。これにより、次の定期的な作業スケジュールを動的に計算できます。これにより、適応型の更新時間、カスタムの再試行動作、ユーザーが毎朝起床する前にニュースフィード ワーカーを実行するなど、高度な機能を実装できます。ExistingPeriodicWorkPolicy.UPDATE
は、次のワーカーのスケジュール設定中に現在実行中のワーカーをキャンセルしないように、これらの手法で使用する必要があります。- 本番環境と一致するスレッド化を使用して WorkManager をテストする。
ExecutorsMode.PRESERVE_EXECUTORS
はinitializeTestWorkManager
で使用して、Configuration
で設定されたエグゼキュータを保持し、実際のメインスレッドを使用できます。 CoroutineWorker
などのコルーチン API が、追加アーティファクト work-runtime-ktx からメイン アーティファクト work-runtime に移動されました。work-runtime-ktx は空になりました。
API の変更
stopReason
をWorkInfo
に追加しました。これにより、ワーカーの実行後にstopReason
を使用できるようになります。ワーカーが停止すると、アプリ自体がすぐに強制終了される可能性があるため、stopReason
を有用な方法で報告する際に役立ちます。(I21386)Clock
を構成で設定し、Worker テストの実行シーケンスの駆動に使用できるようにします。(Ic586e)- ワーカーが停止した理由のヒントを提供する
getStopReason()
メソッドをListenableWorker
に追加しました。(I07060) - リソースのリークの警告を Closeguard から回避するために
WorkManagerTestInitHelper#closeWorkDatabase()
を追加しました。(Ia8d49) WorkInfo
のコンストラクタが公開され、テストで役立つようになりました。(Ia00b6、b/209145335)work-runtime-ktx
が空になり、CoroutineWorker
などの Kotlin 固有のユーティリティがメインのワークルートタイム アーティファクトで使用できるようになりました。(I71a9a)- 定期的な処理のスケジュールを正確に設定できる
setNextScheduleTimeOverride
メソッドを追加しました。(I3b4da) - スケジュールされた実行時刻の情報を取得する
getNextScheduleTimeMillis
がWorkInfo
に追加されました。(I797e4) - 初期遅延と周期の情報が
WorkInfo
に追加されました。(I52f2f) - メソッド
getWorkInfosByTagFlow
、getWorkInfoByIdFlow
、getWorkInfosForUniqueWorkFlow
、getWorkInfosFlow
を介して Flows を介したメソッド オブザーバーを追加(If122a) Constraints
のコンストラクタとプロパティに不足している@RequiresApi(...)
アノテーションを追加しました。WorkManager
の初期バージョンから存在するConstraints.Builder
のセッターの対応するアノテーションと一致するようになりました。(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 に含まれる commit については、こちらをご覧ください。
- 前回のベータ版リリースからの変更はありません
バージョン 2.9.0-beta01
2023 年 9 月 6 日
androidx.work:work-*:2.9.0-beta01
がリリースされました。バージョン 2.9.0-beta01 に含まれる commit については、こちらをご覧ください。
API の変更
WorkInfo.stopReason
とListenableWorker.stopReason
から返される停止理由の定数を追加しました(I0cc00)
バージョン 2.9.0-alpha02
2023 年 7 月 26 日
androidx.work:work-*:2.9.0-alpha02
がリリースされました。バージョン 2.9.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
- これで、
WorkManager
にワーカーが以前に停止された理由に関するヒントが表示されます。ワーカ自体からgetStopReason()
メソッドを介してクエリできます。また、WorkInfo
からgetStopReason()
を介してクエリすることもできます。
API の変更
stopReason
をWorkInfo
に追加しました。ワーカーの実行後にstopReason
を使用できるようになります。ワーカーが停止すると、アプリ自体もすぐに強制終了される可能性があるため、stopReason
をレポートに使用すると便利です。(I21386)- Clock を構成で設定し、Worker テストの実行シーケンスの駆動に使用できるようにしました。(Ic586e)
- ワーカーが停止した理由を示すヒントを提供する
getStopReason()
メソッドがListenableWorker
に追加されました。(I07060) - リソースのリークの警告を Closeguard から回避するために
WorkManagerTestInitHelper#closeWorkDatabase()
を追加しました。(Ia8d49)
バグの修正
TestDriver
を使用してoverrideNextScheduleTime
をバイパスする機能を追加し、テスト可能性に関する問題を修正しました。(Ic2905)
バージョン 2.9.0-alpha01
2023 年 6 月 7 日
androidx.work:work-*:2.9.0-alpha01
がリリースされました。バージョン 2.9.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
Flow
によるオブザーバビリティ。ワーカーの進行状況をLiveData
ではなく、Flow のWorkManager.getWorkInfosFlow
などのメソッドで確認できるようになりました。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) - Constraints のコンストラクタとプロパティに不足している
@RequiresApi(...)
アノテーションを追加しました。WorkManager
の初期バージョンから存在するConstraints.Builder
のセッターの対応するアノテーションと一致するようになりました。(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 に含まれる commit については、こちらをご覧ください。
バグの修正
- 以前は 2 つの同時ブロードキャストを正しく処理できなかった
RescheduleReceiver
の ANR を修正しました。(b/236906724)
バージョン 2.8.0
2023 年 2 月 8 日
androidx.work:work-*:2.8.0
がリリースされました。バージョン 2.8.0 に含まれる commit については、こちらをご覧ください。
2.7.0 以降の重要な変更
新機能
- 元のキュー登録時間やチェーンなどを保持するよう、影響を与えない方法で
WorkRequests
を更新する機能が追加されました。この機能については、詳細が記載されたブログ投稿と、WorkManager.updateWork
、ExistingPeriodicWorkPolicy.UPDATE
の Javadoc をご覧ください。
API の変更
- 元のキュー登録時間やチェーンを保持して処理を更新するための
WorkManager.updateWork
が追加されました。(I9a248、b/219446409) ExistingPeriodicWorkPolicy.UPDATE
が追加されました。このポリシーにより、名前で定期的な処理を更新できます。これは既存のREPLACE
と類似していますが、影響が軽減されます。つまり、ワーカーが現在実行中であれば、ワーカーはキャンセルされず、キュー登録時間が維持されます。初期遅延と期間は、更新時間ではなく、元のキュー登録時間から計算されます。名前が非常に似ているREPLACE
とUPDATE
の混同を軽減するため、REPLACE
は非推奨になりました。REPLACE
の以前のセマンティクスを継続したい場合は、REPLACE
と同じである、CANCEL_AND_REENQUEUE
を使用できます。(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
を直接作成するためのヘルパー メソッドWorkQuery.fromIds
、WorkQuery.fromStates
、WorkQuery.fromUniqueWorkNames
、WorkQuery.fromTags
を追加しました。(b/199919736)(If48f2、b/199919736)getForegroundInfo
をWorker
に追加しました。(Ic1ead)- RxJava 2 と RxJava 3 の両方の
RxWorker
に、ListenableFuture
を返すsetForegroundInfoAsync
の代わりに使用できる、Completable
を返すsetForeground
が追加されました。 - RxJava 2 と RxJava 3 の両方の
RxWorker
に、ListenableFuture
を返すgetForegroundInfoAsync
の代わりに使用できる、Single
を返すgetForegroundInfo
が追加されました。(b/203851459) Constraints.Builder
を使用せずに制約を直接構築できるようになり、Kotlin ユーザーにとって便利になりました。(Idc390、b/137568653)WorkManager
が初期化されているかどうかを確認する機能を追加しました。また、WorkManager
が初期化された構成をライブラリのデベロッパーが取得できるように、新しいgetConfiguration()
API を追加しました。(I6eff3、b/212300336)
バグの修正
- 過度な処理を行うスケジューラにより負荷がかかった場合に、ワーカーが直ちに実行されない問題を修正しました。(I9686b、b/248111307)
- SDK 33 以降で
POST_NOTIFICATIONS
権限を付与する必要がある API に@RequiresPermission
を追加しました。(Ie542e、b/238790278) suspendCancellableCoroutine
を使用すると、CoroutineScope
のキャンセルがListenableFuture
に反映されます。
バージョン 2.8.0-rc01
2022 年 12 月 7 日
androidx.work:work-*:2.8.0-rc01
がリリースされました。バージョン 2.8.0-rc01 に含まれる commit については、こちらをご覧ください。
新機能
- このリリースには新機能はありません。バージョン アップを主としたリリースです。
バージョン 2.8.0-beta02
2022 年 11 月 9 日
androidx.work:work-*:2.8.0-beta02
がリリースされました。バージョン 2.8.0-beta02 に含まれる commit については、こちらをご覧ください。
バグの修正
- 以前は新しい世代の情報が考慮されていなかった
WorkInfo
のequals
メソッドを修正しました。(4977cc)
バージョン 2.8.0-beta01
2022 年 10 月 5 日
androidx.work:work-*:2.8.0-beta01
がリリースされました。バージョン 2.8.0-beta01 に含まれる commit については、こちらをご覧ください。
バグの修正
- 過度な処理を行うスケジューラにより負荷がかかった場合に、ワーカーが直ちに実行されない問題を修正しました。(I9686b、b/248111307)
バージョン 2.8.0-alpha04
2022 年 9 月 7 日
androidx.work:work-*:2.8.0-alpha04
がリリースされました。バージョン 2.8.0-alpha04 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
新機能
- 元のキュー登録時間やチェーンなどを保持するよう、影響を与えない方法で
WorkRequests
を更新する機能が追加されました。詳しくは、WorkManager.updateWork
およびExistingPeriodicWorkPolicy.UPDATE
をご覧ください。
API の変更
- 元のキュー登録時間やチェーンを保持して処理を更新するための
WorkManager.updateWork
が追加されました。(I9a248、b/219446409) ExistingPeriodicWorkPolicy.UPDATE
が追加されました。このポリシーにより、名前で定期的な処理を更新できます。これは既存のREPLACE
と類似していますが、影響が軽減されます。つまり、ワーカーが現在実行中であれば、ワーカーはキャンセルされず、キュー登録時間が維持されます。初期遅延と期間は、更新時間ではなく、元のキュー登録時間から計算されます。名前が非常に似ているREPLACE
とUPDATE
の混同を軽減するため、REPLACE
のサポートを終了しました。REPLACE
の以前のセマンティクスを継続したい場合は、REPLACE
と同じである、CANCEL_AND_REENQUEUE
を使用できます。(I985ed、b/219446409)SchedulingExceptionHandler
を定義することによってスケジュール例外をインターセプトする機能を追加しました。(I033eb)OneTimeWorkRequest
およびPeriodicWorkRequest
のインライン ヘルパーをandroidx.work:work-runtime-ktx
からandroidx.work:work-runtime
に移動しました。(I0010f、b/209145335)
バグの修正
- SDK 33 以降で POST_NOTIFICATIONS 権限を付与する必要がある API に
@RequiresPermission
を追加しました。(Ie542e、b/238790278)
バージョン 2.8.0-alpha02
2022 年 4 月 6 日
androidx.work:work-*:2.8.0-alpha02
がリリースされました。バージョン 2.8.0-alpha02 に含まれる commit については、こちらをご覧ください。
API の変更
- Builder を使用せずに制約を直接構築できるようになり、Kotlin ユーザーにとって便利になりました。(Idc390、b/137568653)
WorkManager
が初期化されているかどうかを確認する機能を追加しました。また、WorkManager
が初期化された構成をライブラリのデベロッパーが取得できるように、新しいgetConfiguration()
API を追加しました。(I6eff3、b/212300336)
バージョン 2.8.0-alpha01
2022 年 1 月 12 日
androidx.work:work-*:2.8.0-alpha01
がリリースされました。バージョン 2.8.0-alpha01 に含まれるコミットについては、こちらをご覧ください。
API の変更
- WorkQuery を直接作成するためのヘルパー メソッド
WorkQuery.fromStates
、WorkQuery.fromUniqueWorkNames
、WorkQuery.fromTags
を追加しました。(If48f2、b/199919736) - 将来の SDK 用に試験運用版の BuildCompat メソッドを追加しました。(Iafd82、b/207528937)
Worker
にgetForegroundInfo
を追加しました。(Ic1ead)- ID から WorkQuery を直接作成するためのヘルパー メソッド
WorkQuery.fromIds
を追加しました。(Ie5bdf、b/199919736) - RxWorker で、
ListenableFuture
を返すsetForegroundInfoAsync
ではなく、Completable
を返すsetForeground
を使用できるようになりました。(I85156) - RxJava 2 の RxWorker で、
ListenableFuture
を返すgetForegroundInfoAsync
ではなく、Single
を返すgetForegroundInfo
を使用できるようになりました。(I21c91、b/203851459) - RxJava 3 の RxWorker で、
ListenableFuture
を返すgetForegroundInfoAsync
ではなく、Single
を返すgetForegroundInfo
を使用できるようになりました。(I1ca8a) - RxWorker で、
ListenableFuture
を返すsetForegroundInfoAsync
ではなく、Completable
を返すsetForeground
を使用できるようになりました。(I992a3、b/203851459)
バグの修正
suspendCancellableCoroutine
を使用すると、CoroutineScope
のキャンセルがListenableFuture
に反映されます。(I77e63)
バージョン 2.7
バージョン 2.7.1
2021 年 11 月 17 日
androidx.work:work-*:2.7.1
がリリースされました。バージョン 2.7.1 に含まれる commit については、こちらをご覧ください。
バグの修正
suspendCancellableCoroutine
を使用すると、CoroutineScope
のキャンセルがListenableFuture
に反映されます。(I77e63)- 遅延処理リクエストが優先としてマークされると、直ちに例外がスローされます。bef1762
バージョン 2.7.0
2021 年 10 月 13 日
androidx.work:work-*:2.7.0
がリリースされました。バージョン 2.7.0 に含まれる commit については、こちらをご覧ください。
2.6.0 以降の重要な変更
WorkManager には、Android 12 のフォアグラウンド サービス制限をサポートする新しい
WorkRequest.Builder.setExpedited(...)
API が導入されています。Android 12 以降、
setExpedited(...)
を使用すると、WorkManager は JobScheduler の優先ジョブに委任します。一方、フォアグラウンド サービスに委任することで、Android 12 より前のバージョンとの下位互換性を提供します。
バージョン 2.7.0-rc01
2021 年 9 月 29 日
androidx.work:work-*:2.7.0-rc01
がリリースされました。バージョン 2.7.0-rc01 に含まれる commit については、こちらをご覧ください。
このバージョンは 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 に含まれる commit については、こちらをご覧ください。
新機能
- 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 に含まれる commit については、こちらをご覧ください。
今回のリリースでは、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 に含まれる commit については、こちらをご覧ください。
新機能
WorkManager
2.6.0-alpha02
以降: あらゆるプロセスで実行できるワーカーのサポートを追加しました。(Iaf200)WorkManager
2.6.0-alpha02
以降: リモート プロセスにバインドできるRemoteListenableWorker
の実装であるRemoteCoroutineWorker
を追加しました。(I30578)
API の変更
- WorkManager
2.6.0-alpha02
以降:TEMPORARILY_UNMETERED
ネットワーク制約のサポートを追加しました。(I08d5e) - WorkManager
2.6.0-alpha02
以降:setProgressAsync()
のマルチプロセス ワーカーのサポート。(Ib6d08) - WorkManager
2.6.0-alpha02
以降: 他のandroidx.startup.Initializer
が依存関係として使用できるようにWorkManagerInitializer
を一般公開しました。(I5ab11)
バージョン 2.7.0-alpha02
2021 年 3 月 10 日
androidx.work:work-*:2.7.0-alpha02
がリリースされました。バージョン 2.7.0-alpha02 に含まれる commit については、こちらをご覧ください。
バグの修正
PendingIntent
の可変性を明示的にして、Android 12 をターゲットに設定したときのクラッシュを修正します。(b/180884673)
バージョン 2.7.0-alpha01
2021 年 2 月 18 日
androidx.work:work-*:2.7.0-alpha01
がリリースされました。バージョン 2.7.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
WorkManager には、Android 12 のフォアグラウンド サービス制限を考慮する新しい
WorkRequest.Builder.setExpedited(...)
API が導入されています。アプリがバックグラウンドで動作している際は、フォアグラウンド サービスを起動できなくなりました。したがって、以前はフォアグラウンド サービスのライフサイクルにバインドされていた、実行時間が長い処理のサポートを強化するには、アプリで
WorkRequest
を expedited としてマークします。この API は、現在非推奨になっている
setForegroundAsync(...)
/setForeground(...)
API の後継です。Android 12 以降、
setExpedited(...)
を使用すると、WorkManager はJobScheduler
の高速ジョブに委任します。一方、フォアグラウンド サービスに委任することで、Android 12 より前のバージョンとの下位互換性を提供します。
API の変更
- 高速化された
WorkRequest
のサポートを追加します。
バージョン 2.6.0
バージョン 2.6.0
2021 年 9 月 1 日
androidx.work:work-*:2.6.0
がリリースされました。バージョン 2.6.0 に含まれる commit については、こちらをご覧ください。
2.5.0 以降の重要な変更
WorkManager で WorkManager の初期化に
androidx.startup
が使用されるようになりました。過去に WorkManager の初期化に使用されていたContentProvider
でtools:node="remove"
を使用していた場合は、以下のようにする必要があります。<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)
リモート プロセスにバインドできる RemoteListenableWorker の実装である
RemoteCoroutineWorker
を追加しました。(I30578)
バージョン 2.6.0-rc01
2021 年 8 月 4 日
androidx.work:work-*:2.6.0-rc01
がリリースされました。バージョン 2.6.0-rc01 に含まれる commit については、こちらをご覧ください。
このバージョンは 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 に含まれる commit については、こちらをご覧ください。
バグの修正
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 に含まれる commit については、こちらをご覧ください。
このリリースには、いくつかの軽微なドキュメントの改善が含まれています。このリリースは 2.6.0-alpha02 とほとんど同じです。
バージョン 2.6.0-alpha02
2021 年 4 月 21 日
androidx.work:work-*:2.6.0-alpha02
がリリースされました。バージョン 2.6.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
あらゆるプロセスで実行できるワーカーのサポートを追加しました。(Iaf200)
リモート プロセスにバインドできる
RemoteListenableWorker
の実装であるRemoteCoroutineWorker
を追加しました。(I30578)
API の変更
TEMPORARILY_UNMETERED
ネットワーク制約のサポートを追加しました。(I08d5e)setProgressAsync()
のマルチプロセス ワーカーのサポート。(Ib6d08)- 他の
androidx.startup.Initializer
が依存関係として使用できるようにWorkManagerInitializer
を一般公開しました。(I5ab11)
バージョン 2.6.0-alpha01
2021 年 3 月 24 日
androidx.work:work-*:2.6.0-alpha01
がリリースされました。バージョン 2.6.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
WorkManager
が WorkManager の初期化にandroidx.startup
を使用するようになりました。以前は、これはandroidx.work.impl.WorkManagerInitializer
によって行われていました。(aosp/1608813)過去にプロセスのライフサイクルの初期化に使用されていた
ContentProvider
でtools:node="remove"
を使用していた場合は、以下のようにする必要があります。<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 の変更
- ListenableWorker の
outputData
を返すResult.getOutputData()
API を追加しています。(Ie51e3)
バグの修正
AlarmManager
API の使用時にSecurityException
がスローされる原因となる OEM バグの回避策を追加しています。(aosp/1587518)
バージョン 2.5.0
バージョン 2.5.0
2021 年 1 月 27 日
androidx.work:work-*:2.5.0
がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください。
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
日間でしたが、keepResultsForAtLeast の期間に1
日を足した期間に短縮されました。(aosp/1419708)- テストを容易にするために、
ListenableWorker
を拡張する具体化されたクラスをTestListenableWorkerBuilder
がサポートするようになりました。(aosp/1443299、b/169787349) - Android Studio Arctic Fox の使用時に WorkManager Inspectorを使用できるようになりました。
バージョン 2.5.0-rc01
2021 年 1 月 13 日
androidx.work:work-*:2.5.0-rc01
がリリースされました。バージョン 2.5.0-rc01 に含まれる commit については、こちらをご覧ください。
バグの修正
WorkQuery
ベースの API を使用すると、エンティティ更新後にgetWorkInfosLiveData
が正しく無効化されないバグを修正しました。(aosp/1540566、b/173769028)- まれに発生する一部のケースで、データベースのトランザクションが成功と記録されなかったバグを修正しました。このバグにより Motorola デバイスの一部で問題が発生します。(aosp/1535368、b/175944460)
- 終了したプロセスからアンバインドしようとするときに
NoSuchElementException
を無視するようにバグを修正しました。(aosp/1530589) ListenableWorker
が未停止の場合にのみ停止させるようConstraintTrackingWorker
を改善しました。(aosp/1496844、b/172946965)- Java 8 を対象とするように androidx.work ライブラリを更新しました。(Ibd2f2)
バージョン 2.5.0-beta02
2020 年 12 月 2 日
androidx.work:work-*:2.5.0-beta02
がリリースされました。バージョン 2.5.0-beta02 に含まれる commit については、こちらをご覧ください。
バグの修正
- 指定されたプロセスにバインドするときに WorkManager が呼び出し元スレッドを誤ってブロックする
androidx.work:work-multiprocess
のバグを修正しました。(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 に含まれる commit については、こちらをご覧ください。
新機能
- インプロセス スケジューラで選択できる
WorkRequest
の数をWorkManager
が自動的にスロットルします。リクエストは引き続き 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 に含まれる commit については、こちらをご覧ください。
API の変更
TestListenableWorkerBuilder
とTestWorkerBuilder
は未加工型を使用しません。(I883ad、b/169787349)
バグの修正
ApplicationInfo
を使用して、デフォルトのアプリのプロセスの名前を判別します。(b/168716641、aosp/1429950)RemoteWorkManager
とRemoteWorkContinuation
の公開設定ルールを修正しました。これらの API は@Restricted
としてマークされなくなりました。(aosp/1432091):work:work-multiprocess
の ProGuard ルールを修正しました。(aosp/1432091)- フォアグラウンド サービスにバインドされている実行時間が長い処理の通知ライフサイクルを改善しました。(b/168502234、aosp/1431331)
バージョン 2.5.0-alpha02
2020 年 9 月 16 日
androidx.work:work-*:2.5.0-alpha02
がリリースされました。バージョン 2.5.0-alpha02 に含まれる commit については、こちらをご覧ください。
新機能
id
を使用してWorkInfo
をクエリできるように、WorkQuery に API を追加します。(aosp/1412372、b/157335295)- WorkManager は、新しいアーティファクト(
androidx.work:work-multiprocess:*
)で複数のプロセスを使用するアプリのサポートを強化します。この新しいアーティファクトにより、大規模アプリで発生する次のような問題を解決できます。- 通常、WorkManager はすべてのアプリプロセスで初期化する必要があります。SQLite の競合が増え、他の問題が生じるため、あまり好ましくありません。今回 WorkManager に新しい API が追加され、
Configuration#setDefaultProcessName(processName)
を使用して primary アプリプロセスを指定できるようになりました。processName
は、packageName:processName
のような完全修飾プロセス名です(例:com.example:remote
)。 - 新しい API のセット: 作業リクエストの
enqueue
、cancel
、query
を行うRemoteWorkManager
とRemoteWorkContinuation
。これらの API にLiveData
バリアントは含まれないため、マルチプロセス全体で SQLite の競合を避けることができます。enqueue
、cancel
、query
に対する呼び出しはすべて、AIDL を使用してprimary
アプリプロセスに転送され、フルーエントなListenableFuture
が返されます。(aosp/1392657、aosp/1411210、aosp/1412215、aosp/1417713)
- 通常、WorkManager はすべてのアプリプロセスで初期化する必要があります。SQLite の競合が増え、他の問題が生じるため、あまり好ましくありません。今回 WorkManager に新しい API が追加され、
API の変更
- WorkManager が、不完全な依存関係を持たない完了した
WorkRequest
を、さらに積極的にプルーニングするようになりました。バッファの期間を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 に含まれる commit については、こちらをご覧ください。
新機能
- 内部 API を変更して、今後
WorkManager
でより適切なツールを提供できるようにしました。情報のアップデートをお待ちください。
バグの修正
- 一部のデバイスでネットワーク状態をトラッキングする際に
SecurityException
を処理するようにしました。(aosp/1396969)
外部からの協力
バージョン 2.4.0
バージョン 2.4.0
2020 年 7 月 22 日
androidx.work:work-*:2.4.0
がリリースされました。バージョン 2.4.0 に含まれる commit については、こちらをご覧ください。
2.3.0 以降の主な変更
WorkManager
のインプロセス スケジューラがより機能的になりました。これまでインプロセスScheduler
は、遅延がなく制約が満たされている作業の実行を考慮するだけでした。インプロセス スケジューラが、PeriodicWorkRequest を含め、今後実行される可能性のあるWorkRequest
をトラッキングするようになりました。またインプロセスScheduler
には、スケジューリングの制限が適用されません(ただし、WorkManager で使用しているExecutor
のサイズには引き続き制限されます)。これにより、アプリがフォアグラウンドにあるとき、より多くの WorkRequest を実行できるようになりました。また、遅延作業のフォアグラウンドでの実行を管理するために、設定可能な新しいRunnableScheduler
がWorkManager
に導入されています。(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)
ExistingWorkPolicy.APPEND_OR_REPLACE
が追加されました。これはAPPEND
に似ていますが、キャンセルされたか前提条件が満たされなかったチェーンを置き換えます。(b/134613984、aosp/1199640)今後実行する必要がある WorkRequest をトラッキングするためのカスタムの
RunnableScheduler
を追加する機能が用意されました。この機能はインプロセス スケジューラで使用します。(aosp/1203944)DelegatingWorkerFactory
を使用するときに委任先のファクトリを動的に追加するためのサポートを追加しました。(b/156289105、aosp/1309745)BATTERY_NOT_LOW
制約のトラッキングを、より厳密にプラットフォームに合わせて調整しました。(aosp/1312583)インプロセス スケジューラは、より適切な API を使用してプロセスの名前を判別するようになりました。複数のプロセスを使用するアプリをより適切にサポートするのに役立ちます。(aosp/1324732)
下記を強制する新しい Lint ルール。
setForegroundAsync()
API を使用する場合の適切なforegroundServiceType
の使用。(b/147873061、aosp/1215915)- JobService API を直接使用するときに WorkManager が使用する JobScheduler ID の指定。(aosp/1223567)
- デフォルトの
WorkerFactory
を使用する場合、ListenableWorker
実装が必ずpublic
になることを保証する新しい lint ルールを追加しました。(aosp/1291262)
ListenableWorker
の完了前に完了しないsetForegroundAsync()
の呼び出しは、返される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 に含まれる commit については、こちらをご覧ください。
バグの修正
- インプロセス スケジューラは、より適切な 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に含まれる commit については、こちらをご覧ください。
バグの修正
- フォアグラウンドの
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 に含まれる commit については、こちらをご覧ください。
新機能
- WorkManager は RxJava 3 をサポートするようになりました。RxJava 3 を使用するには、依存関係
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
を含める必要があります。(aosp/1277904) - デフォルトの
WorkerFactory
を使用する場合、ListenableWorker
実装が必ずpublic
になることを保証する新しい lint ルールを追加しました。(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 に含まれる commit については、こちらをご覧ください。
新機能
WorkRequest
がConstraints.setRequiresCharging(...)
とConstraints.setRequiresDeviceIdle(...)
の両方を必要とする場合に警告する、新しい Lint ルールを追加しました。一部のデバイスでは、充電とアイドリングが同時に行われません。そのため、このようなリクエストが行われる頻度は予想よりも低くなります。(aosp/1253840)
API の変更
WorkQuery
を使用してWorkInfo
をクエリする機能を追加しました。これは、デベロッパーが複数の属性を組み合わせてWorkInfo
をクエリする場合に便利です。詳しくは、WorkQuery.Builder withStates(...)
、WorkQuery.Builder withTags(...)
、またはWorkQuery.Builder withUniqueWorkNames(...)
をご覧ください。(aosp/1253230、b/143847546)ListenableWorker
の完了前に完了しないsetForegroundAsync()
の呼び出しは、返される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 に含まれる commit については、こちらをご覧ください。
新機能
WorkManager
のインプロセス スケジューラがより機能的になりました。これまでインプロセス スケジューラは、遅延がなく制約が満たされている作業の実行を考慮するだけでした。インプロセス スケジューラが、PeriodicWorkRequest
を含め、今後実行される可能性のあるWorkRequest
をトラッキングするようになりました。またインプロセス スケジューラは、スケジューリングの制限を遵守しません(ただし、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)JobService
API を直接使用するときにWorkManager
が使用するJobScheduler
ID の指定。(aosp/1223567)
API の変更
ExistingWorkPolicy.APPEND_OR_REPLACE
が追加されました。これはAPPEND
に似ていますが、キャンセルされたか前提条件が満たされなかったチェーンを置き換えます。(b/134613984、aosp/1199640)今後実行する必要がある
WorkRequest
をトラッキングするため、カスタムRunnableScheduler
を追加できる機能を提供。この機能はインプロセス スケジューラで使用します。(aosp/1203944)
バグの修正
RxWorker
のsetProgress()
はSingle<Void>
という使用不可の型を返していたため、非推奨にしました。代わりにCompletable
を返す新しい APIsetCompletableProgress()
を追加しました。また、新しい API への移行に役立つ新しい lint ルールを追加しました。(b/150080946、aosp/1242665)
バージョン 2.3.4
バージョン 2.3.4
2020 年 3 月 18 日
androidx.work:work-*:2.3.4
がリリースされました。バージョン 2.3.4 に含まれる commit については、こちらをご覧ください。
バグの修正
- 長時間実行
Worker
の複数インスタンスが、10 分間の実行時間枠を超えた後に実行されるバグを修正しました。(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 に含まれる commit については、こちらをご覧ください。
バグの修正
- 中断された
Worker
のスケジュールが正しく更新されないバグを修正しました。(b/150325687、aosp/1246571)
バージョン 2.3.2
バージョン 2.3.2
2020 年 2 月 19 日
androidx.work:work-*:2.3.2
がリリースされました。バージョン 2.3.2 に含まれる commit については、こちらをご覧ください。
バグの修正
- WorkManager がまれに JobScheduler の 100 件のジョブ制限を超える問題を修正しました。(aosp/1226859、b/149092520)
- ConstraintControllers の競合状態を修正しました。(aosp/1220100)
- 長時間実行 Workers の管理フォアグラウンド サービスのライフサイクルを改善しました。(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)ForegroundInfo
でforegroundServiceType
を使用するときにAndroidManifest.xml
でforegroundServiceType
が指定されていることを確認する lint ルールを追加しました。(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 に含まれる commit については、こちらをご覧ください。
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 に含まれる commit については、こちらをご覧ください。
このリリースは 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 に含まれる commit については、こちらをご覧ください。
新機能
- リカバリ不能 SQLite 例外のエラー メッセージが改善されました。(aosp/1185777)
- オンデマンド初期化を使用するときに、コンテンツ プロバイダ
androidx.work.impl.WorkManagerInitializer
がAndroidManifest.xml
から削除されるようにする lint ルールが追加されました(aosp/1167007) PeriodicWorkRequest
でenqueueUniquePeriodicWork()
の代わりにenqueue()
が使用される場合の lint 警告を追加しました。(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 に含まれる commit については、こちらをご覧ください。
新機能
- 新しい 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 に含まれる commit については、こちらをご覧ください。
新機能
WorkManager.createCancelPendingIntent()
API を追加しました。この API を使用すると、AndroidManifest.xml
に別のコンポーネントを登録しなくてもWorkRequest
を簡単にキャンセルできます。特にNotification
のWorkRequest
のキャンセルが簡単に行えます。これは、2.3.0 の新しいフォアグラウンド API と組み合わせる予定です。- WorkManager は
androidx.room:*:2.2.0
安定版に依存するようになりました。
API の変更
- 基盤となるプラットフォーム API との整合性を保つため、
ForegroundInfo.getNotificationType()
の名前をForegroundInfo.getForegroundServiceType()
に変更しました。(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 に含まれる commit については、こちらをご覧ください。
新機能
- 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()
メソッドが追加されました。また、deepEquals
型のArray
もサポートします。(b/140922528)- WorkManager は内部データベースと設定ファイルをバックアップなしのディレクトリに保存するようになりました。(b/114808216)
バージョン 2.3.0-alpha01
2019 年 8 月 22 日
androidx.work:work-*:2.3.September 5, 20190-alpha01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
ListenableWorker
でsetProgressAsync()
API を使用して進行状況を設定できるようになりました。また、それに対応して、setProgress
API のsuspend
機能がCoroutineWorker
に、Single<Void>
を返すsetProgress
がRxWorker
に追加されました。Worker はこれらの新しい API を使用し、対応するgetProgress
API を持つWorkInfo
を介して進捗状況情報を伝えることができます。(b/79481554)Data
のcontainsKey()
API を使用すると、Worker
への入力データに期待される型のキーが含まれていることを検証できます。(b/117136838)Data.toByteArray()
とData.fromByteArray()
を使用してData
をシリアル化できるようになりました。Data
ではバージョニングが保証されないため、このデータを保持したり、アプリ間の IPC で使用したりしないでください。これらのメソッドは、同じアプリの複数のプロセス間でのみ安全に使用できます。Configuration.setInputMergerFactory
を介してInputMergerFactory
を指定する機能が追加されました。(b/133273159)
API の変更
- 以前に呼び出された
ListenableWorker
のインスタンスをWorkerFactory
が返した場合、WorkManager がIllegalStateException
のインスタンスをスローするようになりました。(b/139554406) ListenableFuture
のキャンセルと、ListenableWorker
のonStopped()
コールバックについて、ドキュメントを更新しました。(b/138413671)
バグの修正
- 処理中の Scheduler が
idle
に関する制約があるWorkRequest
を無視するようになりました。これらのリクエストは現在、デバイスが実際にidle
の状態の場合にのみ、JobScheduler
によって選択されます。(aosp/1089779) - テストの際に、
TestScheduler
が内部タスクのエグゼキュータに指定されたExecutor
を正しく使用するようになりました。(aosp/1090749)
バージョン 2.2.0
バージョン 2.2.0
2019 年 8 月 15 日
androidx.work:work-*:2.2.0
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
このリリースは androidx.work:work-*:2.2.0-rc01
と同一です。
2.2.0 の 2.1.0 からの重要な変更
androidx.work:work-gcm:2.2.0
は、Google Play 開発者サービスが API レベル 22 以下で使用可能な場合に GCMNetworkManager をスケジューラとして使用できるようにするための新しい Maven アーティファクトです。これはオプションの依存関係であり、古い API バージョンにおけるバックグラウンド処理の信頼性とパフォーマンスの向上に役立ちます。アプリで Google Play 開発者サービスを使用している場合、この依存関係を Gradle ファイルに追加することで、GCMNetworkManager が自動的にサポートされるようになります。Play 開発者サービスを使用できない場合、古いデバイスではこれまでどおり WorkManager が AlarmManager に切り替わります。
バージョン 2.2.0-rc01
2019 年 7 月 30 日
androidx.work:work-*:2.2.0-rc01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
- サービスを通常より早くシャットダウンし、まれに
RejectedExecutionException
を発生させる、AlarmManager の実装のバグを修正しました。(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
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
2.2.0-beta01
で導入された意図しない JaCoCo 依存関係を削除しました。
バージョン 2.2.0-beta01
2019 年 7 月 17 日
androidx.work:work-*:2.2.0-beta01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
新機能
androidx.work:work-gcm:2.2.0-beta01
は、Google Play 開発者サービスが API レベル 22 以下で使用可能な場合に GCMNetworkManager をスケジューラとして使用できるようにするための新しい Maven アーティファクトです。これはオプションの依存関係であり、古い 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 が必要になりました。問題が発生した場合は、build.gradle
にkotlinOptions { jvmTarget = "1.8" }
を追加できます。- WorkManager のオンデマンド初期化が追加されました。オンデマンド初期化では、参照されたときにのみ WorkManager を作成します(b/127497100)。オンデマンド初期化に対応するためにプロジェクトを設定する手順は次のとおりです。
- 自動イニシャライザを無効にします。
- カスタム
Application
オブジェクトにConfiguration.Provider
を実装します。 WorkManager.getInstance()
のすべての参照をWorkManager.getInstance(Context)
に変更します。この変更の一環として、WorkManager.getInstance()
のサポートが終了しました。オンデマンド初期化を行わない場合でも、新しいWorkManager.getInstance(Context)
を呼び出すことで常により高い安全性が得られます。
PeriodicWorkRequest
が初期遅延をサポートするようになりました。初期遅延を設定するには、PeriodicWorkRequest.Builder
のsetInitialDelay
メソッドを使用します。b/111404867DelegatingWorkerFactory
を使用して 1 つ以上の登録済みのWorkerFactory
にデリゲートする機能が追加されました。b/131435993- WorkManager がそのすべての内部ブックキーピングに使用する
Executor
を、Configuration.Builder.setTaskExecutor
を介してカスタマイズする機能が追加されました。 work-testing
アーティファクトでTestWorkerBuilder
とTestListenableWorkerBuilder
を使用して、単体テストが可能なWorker
クラスとListenableWorker
クラスを作成する機能を追加しました。work-testing
は Kotlin を依存関係として取得するようになりました。このアーティファクトにはデフォルトで複数の Kotlin 拡張機能が含まれています。
WorkInfo
に実行試行回数が追加されました。b/127290461Data
型でバイトおよびバイト配列の格納と取得を行えるようになりました。ただし、Data
オブジェクトの最大サイズに変更はありません。- WorkManager が
Room 2.1.0
に依存するようになりました。これにより、データベースに関する問題がいくつか解決します。
バージョン 2.1.0-rc01
2019 年 6 月 27 日
androidx.work:work-*:2.1.0-rc01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
- バックアップ中に
JobScheduler
を使用してジョブを実行した場合にアプリがクラッシュするバグを修正しました。b/135858602
バージョン 2.1.0-beta02
2019 年 6 月 20 日
androidx.work:work-*:2.1.0-beta02
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
TestListenableWorkerBuilder
がListenableWorker
のインスタンスを作成する際に適切なWorkerFactory
を使用するようになりました。b/135275844- プロセスの終了が原因で
WorkRequest
の実行時間にブレが生じるバグを修正しました。b/135272196
バージョン 2.1.0-beta01
2019 年 6 月 13 日
androidx.work:work-*:2.1.0-beta01
がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。
バグの修正
- WorkManager が
Room 2.1.0
に依存するようになりました。これにより、データベースに関する問題がいくつか解決します。 - メインスレッド上の一部の起動ディスク I/O を削除しました。
- 制約の追跡時の潜在的なデッドロックを修正しました。b/134361006
- WorkManager に起因する無効なジョブをあらかじめキャンセルするようにしました。b/134058261
- 不正な動作をするデバイスに対処するために、JobScheduler 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
が初期遅延をサポートするようになりました。初期遅延を設定するには、PeriodicWorkRequest.Builder
のsetInitialDelay
メソッドを使用します。b/111404867DelegatingWorkerFactory
を使用して 1 つ以上の登録済みのWorkerFactory
にデリゲートする機能が追加されました。b/131435993WorkManager がそのすべての内部ブックキーピングに使用する
Executor
を、Configuration.Builder.setTaskExecutor
を介してカスタマイズする機能が追加されました。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/127290461Data
型でバイトおよびバイト配列の格納と取得を行えるようになりました。ただし、Data
オブジェクトの最大サイズに変更はありません。CoroutineWorker.coroutineContext
を非推奨にしました。このフィールドは誤ってCoroutineDispatcher
として型付けされていましたが、suspend 関数の本文で目的の coroutineContext にアクセスできるようになったため、今後このフィールドは不要になります。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 により、Robolectric テストが正常に動作するようになりました。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 とまったく同じです。
今後、1.x ブランチの更新はほとんど行われないため、WorkManager 2.x へのアップデートを強くおすすめします。また、1.x ライブラリ用の新しい API もリリースされません。
バージョン 1.0.1-rc01
2019 年 4 月 2 日
WorkManager 1.0.1-rc01 がリリースされました。このバージョンにはバグの修正がいくつか含まれています。
バグの修正
- WorkManager により、Robolectric テストが正常に動作するようになりました。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 安定版リリースの 2 番目のリリース候補です。 このリリースにはバグの修正が 2 つ含まれています。
バグの修正
アプリのクラッシュ後に
Worker
が正しくスケジュール設定されるようになりました。b/124546316未確認の
Exception
をスローするWorker
がFAILED
として正しくマークされるようになり、アプリプロセスがクラッシュしなくなりました。
バージョン 1.0.0-rc01
2019 年 2 月 14 日
これは WorkManager の 1.0.0 安定版リリースのリリース候補です。 このリリースにはバグの修正が 1 つ含まれています。
バグの修正
- AlarmManager ベースの実装が PeriodicWorkRequest の
flex
期間を適切に考慮するようになりました。b/124274584
バージョン 1.0.0-beta05
2019 年 2 月 6 日
このリリースにはバグの修正がいくつか含まれています。
バグの修正
JobScheduler.getPendingJob(...)
が API 23 で使用されていた問題を修正しました。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 が Wakelock をリークする問題を修正しました。
バージョン 1.0.0-beta03
2019 年 1 月 25 日
このリリースにはバグの修正がいくつか含まれています。
バグの修正
1.0.0-beta02
で回帰が発生していました(それが原因で、特定の状況で処理が正常に実行されていませんでした)。b/123211993- 作業においてバックオフのタイミングが適切に考慮されない問題を修正しました。b/122881597
- Android 5.1 以下が搭載されているデバイスで
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-rc01
ではなく1.1.1
を使用するよう移行しました(これらのバージョンはまったく同じものです)。b/122578011
バージョン 1.0.0-beta01
2018 年 12 月 19 日
このリリースには API の変更は含まれていません。今後、重大な問題が発生しない限り、WorkManager は次のバージョンまで安定版 API として使用される予定です。このリリースにはバグの修正がいくつか含まれています。
バグの修正
- 以前にキャンセルされた子は、その親の作業が正常に完了しても実行されなくなります。b/120811767
- ロギングクラスが適切に初期化されるようになりました(テスト中にメイン表示されるようになりました)。
バージョン 1.0.0-alpha13
2018 年 12 月 12 日
このリリースには、一部の Kotlin ユーザーにとって有用な、API の軽微な変更が含まれています。
API の変更
androidx.work.Result
がListenableWorker
の内部クラスになりました。これにより、Kotlin の最上位のResult
クラスとのリファクタリングの競合が防止されます。これは API の互換性を破る変更です。b/120564418
API の互換性を破る変更
androidx.work.Result
がListenableWorker
の内部クラスになりました。
バージョン 1.0.0-alpha12
2018 年 12 月 5 日
このリリースには API の互換性を破る変更が含まれています。詳しくは、以下の「API の互換性を破る変更」をご覧ください。このバージョンは最初のベータ版としてリリースされる可能性があります。alpha12
ではドキュメントが広範にわたって更新されています。
API の変更
- 新しいアーティファクトである
work-rxjava2
にRxWorker
が導入されました。これはSingle<Payload>
を必要とするListenableWorker
です。 - Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、
work-firebase
アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。 Payload
がResult
に統合されました。Result
は、3 つの具体的な実装を含む「シールクラス」になりました。このクラスは、Result.success()
(またはResult.success(Data)
)、Result.failure()
(またはResult.failure(Data)
)、Result.retry()
を介して取得できます。ListenableFuture
の結果はPayload
ではなくResult
になります。Worker
には出力のData
用の getter メソッドと setter メソッドはありません。これは互換性を破る変更です。Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
、Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
、および各種のバリアントが追加され、コンテンツ URI の低速トリガーに対するサポートが改善されました。b/119919774WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
のバリアントが追加されました。このメソッドには API 26 が必要です。- Kotlin 拡張メソッドの
Operation.await()
とListenableFuture.await()
が追加されました。 Operation.getException()
の名前がOperation.getThrowable()
に変更されました。これは互換性を破る変更です。ContentUriTriggers
クラスとそれを参照するメソッドの一般使用ができなくなりました。これは互換性を破る変更です。- API の合理化のために、
WorkManager
、WorkContinuation
、OneTimeWorkRequest
に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数をArrays.asList(...)
でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。これは互換性を破る変更です。 WorkContinuation.combine(OneTimeWorkRequest, *)
のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存のcombine
メソッドの可読性が高まりました。これは互換性を破る変更です。
バグの修正
- Marshmallow 以前の実装における、実行中タスクのプロセス終了からの復元に関する信頼性が改善されました。
observeForever
で監視されているLiveData
が WorkManager で追跡されるようになりました。これは、Room ライブラリの修正を移植したものです。b/74477406- シリアル化されたオブジェクトがその最大サイズを超えた場合に、
Data.Builder.build()
が例外をスローするようになりました。以前は、この例外のスローは、オブジェクトを適切に処理できないバックグラウンド スレッドでのみ行われていました。 - 処理の停止とキャンセルの区別がより明確になりました。
getWorkInfoById()
はListenableWorker.onStopped()
の実行中、State
をCANCELLED
に設定してWorkInfo
を返します。 ListenableWorker
でnull
Result
がエラーとして処理されるようになりました。b/120362353- SHIELD Tablet で API 24 を実行しているときに
IllegalArgumentException
がスローされることがある問題に対し、理論的な修正が行われました。b/119484416
API の互換性を破る変更
- Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、
work-firebase
アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。 Payload
がResult
に統合されました。Result
は、3 つの具体的な実装を含む「シールクラス」になりました。このクラスは、Result.success()
(またはResult.success(Data)
)、Result.failure()
(またはResult.failure(Data)
)、Result.retry()
を介して取得できます。ListenableFuture
の結果はPayload
ではなくResult
になります。Worker
には出力のData
用の getter メソッドと setter メソッドはありません。- Kotlin 拡張メソッドの
Operation.await()
とListenableFuture.await()
が追加されました。 Operation.getException()
の名前をOperation.getThrowable()
に変更しました。ContentUriTriggers
クラスとそれを参照するメソッドの一般使用ができなくなりました。- API の合理化のために、
WorkManager
、WorkContinuation
、OneTimeWorkRequest
に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数を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()
に変更されました。これは互換性を破る変更です。- 各種の
@NonNull
アノテーションが公開 API に追加され、API の使いやすさが改善されました。 WorkManager.enqueueUniqueWork()
API が追加され、WorkContinuation
を作成せずに一意のOneTimeWorkRequest
をキューに登録できるようになりました。WorkManager
のenqueue
メソッドとcancel
メソッドのすべてのバリアントが新しいOperation
型を返すようになりました。これは互換性を破る変更です。enqueue
のすべてのバリアントがWorkRequest
の可変長引数を受け取らなくなりました。これは互換性を破る変更です。 代わりにコレクションを使用してください。Arrays.asList()
を使用すると、既存のコードを変更できます。この変更は、API サーフェスとメソッドの数を減らすことを目的としています。- 各プロセスで
WorkManager
を複数回initialize
しようとすると、IllegalStateException
が発生するようになりました。これは互換性を破る変更です。
バグの修正
work-runtime-ktx
アーティファクトのWorkRequest.Builder
でListenableWorker
が使用されるようになりました。b/117666259PeriodicWork
の次回の実行時間が将来の時間に設定されるようになりました。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
の可変長引数を受け取らなくなりました。- 各プロセスで
WorkManager
を複数回initialize
しようとすると、IllegalStateException
が発生するようになりました。
バージョン 1.0.0-alpha10
2018 年 10 月 11 日
このリリースでは、デベロッパーが管理する非同期タスクがサポートされています。また、このリリースには API の互換性を破る変更が含まれています。詳しくは、以下の「API の互換性を破る変更」をご覧ください。
Google は、WorkManager がアルファ版の最終段階に入ると予想しています。また、ベータ版では安定版 API になると期待しています。公開バグトラッカーでフィードバックをお送りください。
API の変更
- デフォルトの
Worker
コンストラクタをはじめ、以前にdeprecated
したすべてのメソッドとクラスが削除されました。これは API の互換性を破る変更です。 NonBlockingWorker
の名前がListenableWorker
に変更されました。この公開クラスは非表示が解除され、使用できる状態になっています。ListenableWorker
は、メインスレッドで呼び出される抽象メソッドの 1 つであるListenableFuture<Payload> onStartWork()
へのアクセスを提供します。タスクを開始して非同期で処理できるようにするのはデベロッパーの責任です。タスクが完了したら、ListenableFuture
を適宜更新する必要があります。ListenableFuture
のリファレンス実装はalpha02
のFutures
パッケージで提供されます(下記のWorkManager
のセクションをご覧ください)。Worker
はListenableWorker
を拡張したもので、以前と同じように動作します(Result doWork()
抽象メソッドを使用)。Worker
の一部のメソッドとメンバーがListenableWorker
に移動されました。- Google は、Kotlin のコルーチン(安定版がリリースされ次第)と RxJava2 を使用する、
ListenableWorker
のリファレンス実装をまもなく提供します。
- インターフェース(
WorkerFactory
)と具体的な実装(DefaultWorkerFactory
)が抽象クラス(WorkerFactory
)に統合されました。この実装により、ユーザーが作成したすべてのWorkerFactory
インスタンスに対する最後の手段として、リフレクションに基づくデフォルトの動作が呼び出されるようになります。これは互換性を破る変更です。 WorkManager.synchronous()
、WorkContinuation.synchronous()
、および関連するすべてのメソッドが削除されました。API の各種メソッドの戻り値の型としてListenableFuture<Void>
が追加されました。これは API の互換性を破る変更です。ListenableFuture
を使用することで、取得と監視を同期させて行えるようになりました。たとえば、以前はvoid
を返していたWorkManager.enqueue()
は、ListenableFuture<Void>
を返すようになりました。処理の完了後にListenableFuture.addListener(Runnable, Executor)
またはListenableFuture.get()
を呼び出してコードを実行できます。ListenableFuture
では処理が成功か失敗かを判断できません。判断できるのは、処理が終了したことだけです。処理が成功か失敗かを確認するには、WorkManager メソッドを連結する必要があります。- これらのオブジェクトでは、
cancel()
の呼び出しは無視されます。その理由は、処理と、結果として生じる作業のどちらをキャンセルするかの判断が難しいためです。これはFuture
コントラクト内で行われます。 getStatus*
同期メソッドと同等の機能を引き続き提供できるようにするために、Google はListenableFuture
のバリアントを提供し、LiveData
を返す既存のメソッドの名前を「LiveData」を明示的に含むものに変更しました(例:getStatusesByIdLiveData(UUID)
)。これは API の互換性を破る変更です。
バグの修正
- 重複する
androidx-annotations.pro
ファイルに関する alpha09 からの既知の問題を修正しました。Gradle ファイルからexclude 'META-INF/proguard/androidx-annotations.pro'
を削除することで、以前のリリースノートの回避策を削除できます。 - ProGuard の設定が追加され、新しい
Worker
コンストラクタを保持できるようになりました。b/116296569 - 処理が
REPLACE
される競合状態での潜在的なNullPointerException
を修正しました。b/116253486、b/116677275 WorkContinuation.combine()
が、2 つ以上ではなく 1 つ以上のWorkContinuation
を受け取るようになりました。b/117266752
API の互換性を破る変更
- デフォルトの
Worker
コンストラクタをはじめ、以前にdeprecated
したすべてのメソッドとクラスが削除されました。 - インターフェース(
WorkerFactory
)と具体的な実装(DefaultWorkerFactory
)が抽象クラス(WorkerFactory
)に統合されました。 WorkManager.synchronous()
とWorkContinuation.synchronous()
が削除されました。WorkManager.getStatus*()
メソッドがListenableFuture
を返すようになりました。また、WorkManager.getStatus*LiveData()
がLiveData
を返すようになりました。
バージョン 1.0.0-alpha09
2018 年 9 月 19 日
既知の問題
「More than one file was found with OS independent path '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 jobs」というエラー メッセージが表示される場合に必要な別の修正が追加されました。b/115560696
- 競合状態が原因の外部キー制約エラーに関する修正がいくつか追加されました。b/114705286
ConstraintTrackingWorker.onStopped(boolean)
の呼び出しが、基になるWorker
にデリゲートされました。b/114125093- Firebase JobDispatcher に対する適切な最小バックオフ遅延が適用されました。b/113304626
- ライブラリ内部のスレッドの保証が改善されました。
- 内部での
LiveData
の重複排除に関する潜在的な問題を修正しました。
API の変更
WorkerFactory
をWorkManager.Configuration
の一部として指定することにより、実行時に独自のWorker
インスタンスを作成できるようになりました。代替ファクトリはDefaultWorkerFactory
です。これは、WorkManager の旧バージョンの動作と一致します。Worker
とNonBlockingWorker
のデフォルト コンストラクタを非推奨にしました。新しいコンストラクタ(Worker(Context, WorkerParameters)
)を使用し、super(Context, WorkerParameters)
を呼び出してください。WorkManager の将来のバージョンでデフォルト コンストラクタが削除される予定です。
- Google 社内で新しい
ListenableFuture
アーティファクトの使用が開始されました(Guava 依存関係はなし)。今後のリリースで、ListenableFutures が API に導入される予定です。この変更により、NonBlockingWorker
が最終的に再表示されます。 TestDriver.setInitialDelayMet(UUID)
とTestDriver.setPeriodDelayMet(UUID)
を使用してTestDriver
の時限タスクをトリガーする機能が追加されました。b/113360060
互換性を破る変更
Worker
とNonBlockingWorker
のデフォルト コンストラクタを非推奨にしました。できるだけ早く新しいコンストラクタに移行してください。将来のバージョンでデフォルト コンストラクタが削除される予定です。
バージョン 1.0.0-alpha08
2018 年 8 月 27 日
バグの修正
- WorkManager コンポーネントがダイレクト ブート非対応として明示的にラベル付けされました。そのため、ダイレクト ブート中は、WorkManager コンポーネントは起動しません。将来、ダイレクト ブートに対応したバージョンの WorkManager が提供される予定です。b/112665532
- 再試行されたタスクが実行されなくなる問題を修正しました。b/112604021
- たびたび定期タスクが実行されなくなる問題を修正しました(上の問題に関連)。b/112859683
- アプリプロセスがすでに実行されている場合、バックオフ ポリシーが優先されるようになりました。
- 制限が 10 KB であることを示すように、
Data
の例外メッセージを修正しました。 JobScheduler
プロセスの完了の遅延に対処するために、Configuration.setMaxSchedulerLimit(int)
の最大値を 50 に下げました。b/112817355
バージョン 1.0.0-alpha07
2018 年 8 月 16 日
バグの修正
- 負の制限値が指定された SQL クエリが結果を際限なく返す可能性がある問題を修正しました。
- 作業の実行が終了したときに、他のスケジューラに含まれているその作業の保留中のすべてのコピーが正しくキャンセルされるようになりました。この問題は、
JobScheduler
のジョブ数の制限超過の原因となっていました。b/111569265 ConstraintTracker
のConcurrentModificationException
を修正しました。b/112272753Data.getBooleanArray(String)
とData.getIntArray(String)
の戻り値の型のアノテーションを、@NonNull
ではなく@Nullable
に変更しました。b/112275229
API の変更
Worker
が新しいクラスNonBlockingWorker
を拡張できるようになりました。この変更による現在の処理への影響はありません。NonBlockingWorker
は将来、カスタムのスレッド ソリューションに完全に対応したエンティティになる予定です。Data.getBooleanArray(String)
とData.getIntArray(String)
の戻り値の型のアノテーションを、@NonNull
ではなく@Nullable
に変更しました。b/112275229- Kotlin 拡張機能:
Map.toWorkData()
を非推奨にし、トップレベルのworkDataOf(vararg Pair<String, Any?>)
を追加することにより、既存の API との整合性を強化しました。
バージョン 1.0.0-alpha06
2018 年 8 月 1 日
バグの修正
- 作業のスケジュール設定時のデータベース ロックを防止できるようになりました。b/111801342
- Doze モード時に
PeriodicWork
がスケジュールどおりに実行されないバグを修正しました。b/111469837 WorkManager
のクラッシュを引き起こす、制約を追跡する際の競合状態を修正しました。googlecodelabs/android-workmanager/issues/56WorkRequest.Builder#build()
を使用する場合に一意のWorkRequest
を作成できるようになりました。b/111408337RescheduleReceiver
は、それを必要とするWorkRequest
が存在する場合にのみ使用できるようになりました。b/111765853
バージョン 1.0.0-alpha05
2018 年 7 月 24 日
API の変更
WorkManager.getInstance()
のアノテーションに、@Nullable
ではなく@NonNull
が使用されるようになりました。その代わり、手動で初期化する場合にシングルトンが適切に初期化されないと、このメソッドはIllegalStateException
をスローします。これは API の互換性を破る変更です。- 新しい 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- デバイスの Doze の後に
PeriodicWorkRequest
が正しく実行されない問題を修正しました。b/111469837 - Firebase JobDispatcher の使用時に初期遅延が発生する問題を修正しました。b/111141023
- 潜在的な競合状態とタイミングに関するいくつかの問題を修正しました。
- 不要になった
BroadcastReceiver
が適切に解放されるようになりました。 - アプリを強制終了した後に再起動する場合のスケジュール変更のパフォーマンスを最適化しました。
- 特定の
WorkRequest
をキューに登録する前後にTestScheduler.setAllConstraintsMet(UUID)
を呼び出せるようになりました。b/111238024
互換性を破る変更
WorkManager.getInstance()
のアノテーションに、@Nullable
ではなく@NonNull
が使用されるようになりました。Data.getString()
のシグネチャが変更され、デフォルト値を取得しなくなりました(暗黙的にnull
)。- 内部用にのみ必要な一部のメソッドが
@hide
としてマークされました。これには、Constraints
コンストラクタ、Data.toByteArray()
、Data.fromByteArray(byte[])
が含まれます。
バージョン 1.0.0-alpha04
2018 年 6 月 26 日
バグの修正
AlarmManager
ベースの実装を使用する場合、PeriodicWorkRequest
のスケジュールが正しく変更されるようになりました。- 強制停止または再起動の後ですべてのワーカーのスケジュールを変更した場合に ANR が発生する可能性がある問題を修正しました。b/110507716
- null 可能性のアノテーションが各種の WorkManager API に追加されました。b/110344065
- Worker の実行時に発生する捕捉されない例外がログに記録されるようになりました。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/109572353work-runtime-ktx
の依存関係を利用する場合に Kotlin コンパイラで警告が出力される問題を修正しました。WorkManager で
Room
バージョン1.1.1-rc1
が使用されるようになりました。
API の変更
WorkContinuation.getStatuses()
の同期バージョンであるgetStatusesSync()
を追加しました。- ユーザーが開始したキャンセルと OS がリクエストした一時的な停止を区別する機能が
Worker
に追加されました。Worker.isStopped()
は、どのような種類の停止がリクエストされた場合でもtrue
を返します。Worker.isCancelled()
は、処理が明示的にキャンセルされた場合にtrue
を返します。b/79632247 - API 28 での JobParameters#getNetwork() のサポートが追加されました。これは
Worker.getNetwork()
を介して公開されます。 Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
が追加されました。これにより、JobScheduler
またはAlarmManager
に送信可能なジョブの数を適用できるようになります。これは、使用可能なJobScheduler
スロットをWorkManager
がすべて取得するのを防ぐのに役立ちます。Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
が追加されました。これは、WorkManager
が安全に使用できるJobScheduler
ジョブ ID の範囲を定義するのに役立ちます。b/79996760Worker.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/79550068Application.onCreate()
でWorker
のスケジュール変更を引き起こしていた問題を修正しました。b/79660657- OS で許可されるよりも多くの処理のスケジュールを設定できる問題を修正しました。b/79497378
Worker
に関連付けられている wake lock のクリーンアップをバックグラウンド スレッドに移動しました。AlarmManager
の実装で、保留中のすべての処理が完了したときに適切にクリーンアップされるようになりました。- 英語地域以外に影響を及ぼしていたクリーンアップの SQL クエリを修正しました。b/80065360
Data
のfloat
に対するサポートが追加されました。b/79443878Data.Builder.putAll()
がBuilder
のインスタンスを返すようになりました。b/79699162- ドキュメントに Javadoc に関する記述を増やし、修正を行いました。b/79691663
API の変更
Worker
が停止されている状態に対応できるようになりました。Worker.isStopped()
を使用すると、Worker
が停止されているかどうかを確認できます。また、Worker.onStopped()
を使用すると、軽量のクリーンアップ処理を実行できます。Worker.getTags()
API が、Worker
に関連付けられているタグのSet
を返すようになりました。javax.time.Duration
のオーバーロードが、期間とTimeUnit
の組み合わせを取得する API 用に追加されました。これは@RequiresApi(26)
によって保護されます。WorkManager
拡張機能がandroidx.work.ktx
パッケージからandroidx.work
パッケージに移動されました。以前の拡張機能を非推奨にし、将来のバージョンで削除される予定です。Configuration.withExecutor()
を非推奨にしました。代わりにConfiguration.setExecutor()
を使用してください
バージョン 1.0.0-alpha01
2018 年 5 月 8 日
WorkManager は、制約に対応した保証済みのバックグラウンド作業のスケジュール設定と実行を簡素化します。この初回リリースは 1.0.0-alpha01
です。