WorkManager

WorkManager API を使用すると、延期可能な(ただし確実に実行される必要がある)非同期タスクのスケジュールを簡単に設定できます。タスクを作成して 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」タイプのフォアグラウンド ワーカーがタイムアウトして、WorkManagerstopSelf() を呼び出さなかった場合に ANR が発生する問題を修正。この修正は、フォアグラウンド サービス タイプが導入された API 34 および 35 を搭載したデバイスにのみ適用されます。(ca06b2b/364508145
  • WorkerFactory の使用時に Worker がバインドするリモート プロセスを切り替えることができる新しい WorkerParameters API。(Ibdc8aIe8a90I7373f)。

バグの修正

  • WorkManager が、作業のフォアグラウンド タイプで Android 14 の前提条件となる権限が取り消されている場合に、長時間実行ワーカー(フォアグラウンド ワーカー)の再起動を試行してクラッシュする問題を修正しました。(b/333957914)。
  • 新しいプラットフォーム API へのアクセスの手動アウトラインを削除しました。これは、AGP 7.3 以降(R8 バージョン 3.3 など)で R8 を使用する場合、および AGP 8.1 以降(D8 バージョン 8.1 など)を使用するすべてのビルドで、API モデリングによって自動的に行われるためです。AGP を使用していないクライアントには、D8 バージョン 8.1 以降に更新することが推奨されます。詳しくは、こちらの記事をご覧ください。(Ia60e0b/345472586)。

バージョン 2.10.0-alpha02

2024 年 4 月 17 日

androidx.work:work-*:2.10.0-alpha02 がリリースされました。バージョン 2.10.0-alpha02 には、これらの commit が含まれています。

API の変更

  • WorkManager で構成可能な @RestrictTo Tracer を介してトレーススパンを出力する機能を追加しました。(I17d7fb/260214125)。
  • CoroutineWorker が実行されるディスパッチャを制御するために、Configuration.workerCoroutineContext が追加されました。WorkManager での Dispatchers.Default の使用を完全に回避するのに役立ちます。(Icd1b7
  • Worker のカスタム例外ハンドラを追加しました。(Ib1b74b/261190695
  • OneTimeWorkRequest.BuilderPeriodicWorkRequest.Builder を、Class の代わりに KClass を使用して作成できるようになりました: val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()Ib55f6
  • WorkManager クラスを Kotlin に移行しました。LiveDataListenableFutureFlow を返すメソッドが、正しい 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 を指定する機能を追加しました。(Id98a1b/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_EXECUTORSinitializeTestWorkManager で使用して、Configuration で設定されたエグゼキュータを保持し、実際のメインスレッドを使用できます。
  • CoroutineWorker などのコルーチン API が、追加アーティファクト work-runtime-ktx からメイン アーティファクト work-runtime に移動されました。work-runtime-ktx は空になりました。

API の変更

  • stopReasonWorkInfo に追加しました。これにより、ワーカーの実行後に stopReason を使用できるようになります。ワーカーが停止すると、アプリ自体がすぐに強制終了される可能性があるため、stopReason を有用な方法で報告する際に役立ちます。(I21386
  • Clock を構成で設定し、Worker テストの実行シーケンスの駆動に使用できるようにします。(Ic586e
  • ワーカーが停止した理由のヒントを提供する getStopReason() メソッドを ListenableWorker に追加しました。(I07060
  • リソースのリークの警告を Closeguard から回避するために WorkManagerTestInitHelper#closeWorkDatabase() を追加しました。(Ia8d49
  • WorkInfo のコンストラクタが公開され、テストで役立つようになりました。(Ia00b6b/209145335
  • work-runtime-ktx が空になり、CoroutineWorker などの Kotlin 固有のユーティリティがメインのワークルートタイム アーティファクトで使用できるようになりました。(I71a9a
  • 定期的な処理のスケジュールを正確に設定できる setNextScheduleTimeOverride メソッドを追加しました。(I3b4da
  • スケジュールされた実行時刻の情報を取得する getNextScheduleTimeMillisWorkInfo に追加されました。(I797e4
  • 初期遅延と周期の情報が WorkInfo に追加されました。(I52f2f
  • メソッド getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow を介して 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 の変更

バージョン 2.9.0-alpha02

2023 年 7 月 26 日

androidx.work:work-*:2.9.0-alpha02 がリリースされました。バージョン 2.9.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • これで、WorkManager にワーカーが以前に停止された理由に関するヒントが表示されます。ワーカ自体から getStopReason() メソッドを介してクエリできます。また、WorkInfo から getStopReason() を介してクエリすることもできます。

API の変更

  • stopReasonWorkInfo に追加しました。ワーカーの実行後に 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 のコンストラクタが公開され、テストで役立つようになりました。(Ia00b6b/209145335)。
  • work-runtime-ktx が空になり、CoroutineWorker などの Kotlin 固有のユーティリティがメインの work-runtime アーティファクトで使用できるようになりました。(I71a9a
  • 定期的な勤務スケジュールを正確に設定できる setNextScheduleTimeOverride メソッドを追加しました(I3b4da)。
  • getEarliestRunTimeMillis の名前を getNextScheduleTimeMillis に変更しました(I2bd7a
  • 次回の実行予定時刻の情報が WorkInfo に追加されます。(I797e4)。
  • 初期遅延と周期の情報が WorkInfo に追加されました。(I52f2f
  • メソッド getWorkInfosByTagFlowgetWorkInfoByIdFlowgetWorkInfosForUniqueWorkFlowgetWorkInfosFlow を介してフロー経由でワーカーを監視するメソッドを追加しました。(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 以降の重要な変更

新機能

API の変更

  • 元のキュー登録時間やチェーンを保持して処理を更新するための WorkManager.updateWork が追加されました。(I9a248b/219446409
  • ExistingPeriodicWorkPolicy.UPDATE が追加されました。このポリシーにより、名前で定期的な処理を更新できます。これは既存の REPLACE と類似していますが、影響が軽減されます。つまり、ワーカーが現在実行中であれば、ワーカーはキャンセルされず、キュー登録時間が維持されます。初期遅延と期間は、更新時間ではなく、元のキュー登録時間から計算されます。名前が非常に似ている REPLACEUPDATE の混同を軽減するため、REPLACE は非推奨になりました。REPLACE の以前のセマンティクスを継続したい場合は、REPLACE と同じである、CANCEL_AND_REENQUEUE を使用できます。(I985edb/219446409
  • setSchedulingExceptionHandler を介してConsumer<Throwable> を提供してスケジュール例外をインターセプトする機能を追加しました。
  • setInitializationExceptionHandler を介して Consumer<Throwable> を提供し、WorkManager を初期化しようとしたときに問題が発生したかどうかを判断する機能を追加しました。
  • OneTimeWorkRequest および PeriodicWorkRequest のインライン ヘルパーを androidx.work:work-runtime-ktx から androidx.work:work-runtime に移動しました。(I0010fb/209145335
  • WorkQuery を直接作成するためのヘルパー メソッド WorkQuery.fromIdsWorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags を追加しました。(b/199919736)(If48f2b/199919736
  • getForegroundInfoWorker に追加しました。(Ic1ead
  • RxJava 2 と RxJava 3 の両方の RxWorker に、ListenableFuture を返す setForegroundInfoAsync の代わりに使用できる、Completable を返す setForeground が追加されました。
  • RxJava 2 と RxJava 3 の両方の RxWorker に、ListenableFuture を返す getForegroundInfoAsync の代わりに使用できる、Single を返す getForegroundInfo が追加されました。(b/203851459
  • Constraints.Builder を使用せずに制約を直接構築できるようになり、Kotlin ユーザーにとって便利になりました。(Idc390b/137568653
  • WorkManager が初期化されているかどうかを確認する機能を追加しました。また、WorkManager が初期化された構成をライブラリのデベロッパーが取得できるように、新しい getConfiguration() API を追加しました。(I6eff3b/212300336

バグの修正

  • 過度な処理を行うスケジューラにより負荷がかかった場合に、ワーカーが直ちに実行されない問題を修正しました。(I9686bb/248111307
  • SDK 33 以降で POST_NOTIFICATIONS 権限を付与する必要がある API に @RequiresPermission を追加しました。(Ie542eb/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 については、こちらをご覧ください

バグの修正

  • 以前は新しい世代の情報が考慮されていなかった WorkInfoequals メソッドを修正しました。(4977cc

バージョン 2.8.0-beta01

2022 年 10 月 5 日

androidx.work:work-*:2.8.0-beta01 がリリースされました。バージョン 2.8.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • 過度な処理を行うスケジューラにより負荷がかかった場合に、ワーカーが直ちに実行されない問題を修正しました。(I9686bb/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 で更新された場合、ワーカーには複数の世代があります。ワーカーが現在実行されている場合、ワーカーの実行中に更新が行われると、このメソッドは現在実行中のワーカーの世代よりも新しい世代を返す可能性がある点に注意してください。(I665c5b/219446409)(I128a9b/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 が追加されました。(I9a248b/219446409
  • ExistingPeriodicWorkPolicy.UPDATE が追加されました。このポリシーにより、名前で定期的な処理を更新できます。これは既存の REPLACE と類似していますが、影響が軽減されます。つまり、ワーカーが現在実行中であれば、ワーカーはキャンセルされず、キュー登録時間が維持されます。初期遅延と期間は、更新時間ではなく、元のキュー登録時間から計算されます。名前が非常に似ている REPLACEUPDATE の混同を軽減するため、REPLACE のサポートを終了しました。REPLACE の以前のセマンティクスを継続したい場合は、REPLACE と同じである、CANCEL_AND_REENQUEUE を使用できます。(I985edb/219446409
  • SchedulingExceptionHandler を定義することによってスケジュール例外をインターセプトする機能を追加しました。(I033eb
  • OneTimeWorkRequest および PeriodicWorkRequest のインライン ヘルパーを androidx.work:work-runtime-ktx から androidx.work:work-runtime に移動しました。(I0010fb/209145335

バグの修正

  • SDK 33 以降で POST_NOTIFICATIONS 権限を付与する必要がある API に @RequiresPermission を追加しました。(Ie542eb/238790278

バージョン 2.8.0-alpha02

2022 年 4 月 6 日

androidx.work:work-*:2.8.0-alpha02 がリリースされました。バージョン 2.8.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • Builder を使用せずに制約を直接構築できるようになり、Kotlin ユーザーにとって便利になりました。(Idc390b/137568653
  • WorkManager が初期化されているかどうかを確認する機能を追加しました。また、WorkManager が初期化された構成をライブラリのデベロッパーが取得できるように、新しい getConfiguration() API を追加しました。(I6eff3b/212300336

バージョン 2.8.0-alpha01

2022 年 1 月 12 日

androidx.work:work-*:2.8.0-alpha01 がリリースされました。バージョン 2.8.0-alpha01 に含まれるコミットについては、こちらをご覧ください

API の変更

  • WorkQuery を直接作成するためのヘルパー メソッド WorkQuery.fromStatesWorkQuery.fromUniqueWorkNamesWorkQuery.fromTags を追加しました。(If48f2b/199919736
  • 将来の SDK 用に試験運用版の BuildCompat メソッドを追加しました。(Iafd82b/207528937
  • WorkergetForegroundInfo を追加しました。(Ic1ead
  • ID から WorkQuery を直接作成するためのヘルパー メソッド WorkQuery.fromIds を追加しました。(Ie5bdfb/199919736
  • RxWorker で、ListenableFuture を返す setForegroundInfoAsync ではなく、Completable を返す setForeground を使用できるようになりました。(I85156
  • RxJava 2 の RxWorker で、ListenableFuture を返す getForegroundInfoAsync ではなく、Single を返す getForegroundInfo を使用できるようになりました。(I21c91b/203851459
  • RxJava 3 の RxWorker で、ListenableFuture を返す getForegroundInfoAsync ではなく、Single を返す getForegroundInfo を使用できるようになりました。(I1ca8a
  • RxWorker で、ListenableFuture を返す setForegroundInfoAsync ではなく、Completable を返す setForeground を使用できるようになりました。(I992a3b/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 の変更

バージョン 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 が導入されています。

    アプリがバックグラウンドで動作している際は、フォアグラウンド サービスを起動できなくなりました。したがって、以前はフォアグラウンド サービスのライフサイクルにバインドされていた、実行時間が長い処理のサポートを強化するには、アプリで WorkRequestexpedited としてマークします。

    この 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 の初期化に使用されていた ContentProvidertools: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 については、こちらをご覧ください

バグの修正

  • RemoteWorkManagerRemoteWorkManagerService から正しくアンバインドされ、RemoteWorkManagerService が正しくクリーンアップされるようになりました。aosp/1730694
  • RemoteListenableWorkerRemoteWorkerService から正しくアンバインドされ、RemoteWorkerService が正しくクリーンアップされるようになりました。aosp/1743817
  • ForceStopRunnable がメインアプリのプロセスでのみ動作するようになりました。これは、複数のプロセスを使用するアプリのリソース競合を回避できる最適化です。aosp/1749180aosp/1761729

バージョン 2.6.0-beta01

2021 年 6 月 2 日

androidx.work:work-*:2.6.0-beta01 がリリースされました。バージョン 2.6.0-beta01 に含まれる 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

    過去にプロセスのライフサイクルの初期化に使用されていた ContentProvidertools: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/172475041aosp/1489577
  • WorkManager は、WorkRequest の完了後に WorkRequest を追跡するバッファ期間を短くすることにより、データベースの増大を制限します。バッファ期間は以前は 7 日間でしたが、keepResultsForAtLeast の期間に 1 日を足した期間に短縮されました。(aosp/1419708
  • テストを容易にするために、ListenableWorker を拡張する具体化されたクラスを TestListenableWorkerBuilder がサポートするようになりました。(aosp/1443299b/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/1540566b/173769028
  • まれに発生する一部のケースで、データベースのトランザクションが成功と記録されなかったバグを修正しました。このバグにより Motorola デバイスの一部で問題が発生します。(aosp/1535368b/175944460
  • 終了したプロセスからアンバインドしようとするときに NoSuchElementException を無視するようにバグを修正しました。(aosp/1530589
  • ListenableWorker が未停止の場合にのみ停止させるよう ConstraintTrackingWorker を改善しました。(aosp/1496844b/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/172475041aosp/1489577
  • setForeground* API の使用時にフォアグラウンド サービスを停止する際のプラットフォームのバグに対する回避策を追加しました。(b/170924044aosp/1489901

バージョン 2.5.0-beta01

2020 年 10 月 28 日

androidx.work:work-*:2.5.0-beta01 がリリースされました。バージョン 2.5.0-beta01 に含まれる commit については、こちらをご覧ください

新機能

  • インプロセス スケジューラで選択できる WorkRequest の数を WorkManager が自動的にスロットルします。リクエストは引き続き FIFO 順で実行されます。(aosp/1455228
  • アプリケーションのデータストアが異常な状態にあるときに WorkManager が復元を試みます。(aosp/1463103

バグの修正

  • ListenableWorker が中断されたときに、すぐに ENQUEUED のマークを付けることで、後で再スケジュールできるようにします。(aosp/1455618b/170273988

バージョン 2.5.0-alpha03

2020 年 10 月 14 日

androidx.work:work-*:2.5.0-alpha03 がリリースされました。バージョン 2.5.0-alpha03 に含まれる commit については、こちらをご覧ください

API の変更

  • TestListenableWorkerBuilderTestWorkerBuilder は未加工型を使用しません。(I883adb/169787349

バグの修正

  • ApplicationInfo を使用して、デフォルトのアプリのプロセスの名前を判別します。(b/168716641aosp/1429950
  • RemoteWorkManagerRemoteWorkContinuation の公開設定ルールを修正しました。これらの API は @Restricted としてマークされなくなりました。(aosp/1432091
  • :work:work-multiprocess の ProGuard ルールを修正しました。(aosp/1432091
  • フォアグラウンド サービスにバインドされている実行時間が長い処理の通知ライフサイクルを改善しました。(b/168502234aosp/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/1412372b/157335295
  • WorkManager は、新しいアーティファクト(androidx.work:work-multiprocess:*)で複数のプロセスを使用するアプリのサポートを強化します。この新しいアーティファクトにより、大規模アプリで発生する次のような問題を解決できます。
    • 通常、WorkManager はすべてのアプリプロセスで初期化する必要があります。SQLite の競合が増え、他の問題が生じるため、あまり好ましくありません。今回 WorkManager に新しい API が追加され、Configuration#setDefaultProcessName(processName) を使用して primary アプリプロセスを指定できるようになりました。processName は、packageName:processName のような完全修飾プロセス名です(例: com.example:remote)。
    • 新しい API のセット: 作業リクエストの enqueuecancelquery を行う RemoteWorkManagerRemoteWorkContinuation。これらの API に LiveData バリアントは含まれないため、マルチプロセス全体で SQLite の競合を避けることができます。enqueuecancelquery に対する呼び出しはすべて、AIDL を使用して primary アプリプロセスに転送され、フルーエントな ListenableFuture が返されます。(aosp/1392657aosp/1411210aosp/1412215aosp/1417713

API の変更

  • WorkManager が、不完全な依存関係を持たない完了した WorkRequest を、さらに積極的にプルーニングするようになりました。バッファの期間を 7 日間から 1 日に変更しました。(aosp/1419708

バグの修正

  • WorkManager は、WorkManager の初期化時に WorkRequestJobScheduler のジョブが同期されるように、ジョブを事前に調整するようになりました。(aosp/1412794b/166292069

バージョン 2.5.0-alpha01

2020 年 8 月 19 日

androidx.work:work-*:2.5.0-alpha01 がリリースされました。バージョン 2.5.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • 内部 API を変更して、今後 WorkManager でより適切なツールを提供できるようにしました。情報のアップデートをお待ちください。

バグの修正

  • 一部のデバイスでネットワーク状態をトラッキングする際に SecurityException を処理するようにしました。(aosp/1396969

外部からの協力

  • Zac Swers 氏の指摘に基づき、ArrayCreatingInputMerger のドキュメントを修正しました。(github/43

バージョン 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 を実行できるようになりました。また、遅延作業のフォアグラウンドでの実行を管理するために、設定可能な新しい RunnableSchedulerWorkManager に導入されています。(aosp/1185778
  • WorkManager は RxJava 3 をサポートするようになりました。RxJava 3 を使用するには、依存関係 implementation "androidx.work:work-rxjava3:2.4.0" を含める必要があります。(aosp/1277904
  • WorkQuery を使用して WorkInfo をクエリする機能を追加しました。これは、デベロッパーが複数の属性を組み合わせて WorkInfo をクエリする場合に便利です。詳しくは、WorkQuery.Builder.fromStates(...)WorkQuery.Builder. fromTags(...)、または WorkQuery.Builder.fromUniqueWorkNames(...) をご覧ください。(aosp/1253230b/143847546
  • 次のコマンドを使用して WorkManager に診断情報を要求する機能が追加されました。

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

    これにより、次のような多くの有用な情報が得られます。

    • 24 時間以内に完了した WorkRequest。
    • 現在実行中の WorkRequest。
    • スケジュール設定された WorkRequest。(aosp/1235501
  • ExistingWorkPolicy.APPEND_OR_REPLACE が追加されました。これは APPEND に似ていますが、キャンセルされたか前提条件が満たされなかったチェーンを置き換えます。(b/134613984aosp/1199640

  • 今後実行する必要がある WorkRequest をトラッキングするためのカスタムの RunnableScheduler を追加する機能が用意されました。この機能はインプロセス スケジューラで使用します。(aosp/1203944

  • DelegatingWorkerFactory を使用するときに委任先のファクトリを動的に追加するためのサポートを追加しました。(b/156289105aosp/1309745

  • BATTERY_NOT_LOW 制約のトラッキングを、より厳密にプラットフォームに合わせて調整しました。(aosp/1312583

  • インプロセス スケジューラは、より適切な API を使用してプロセスの名前を判別するようになりました。複数のプロセスを使用するアプリをより適切にサポートするのに役立ちます。(aosp/1324732

  • 下記を強制する新しい Lint ルール。

    • setForegroundAsync() API を使用する場合の適切な foregroundServiceType の使用。(b/147873061aosp/1215915
    • JobService API を直接使用するときに WorkManager が使用する JobScheduler ID の指定。(aosp/1223567
    • デフォルトの WorkerFactory を使用する場合、ListenableWorker 実装が必ず public になることを保証する新しい lint ルールを追加しました。(aosp/1291262
  • ListenableWorker の完了前に完了しない setForegroundAsync() の呼び出しは、返される ListenableFutureIllegalStateException によって通知されるようになりました。(aosp/1262743

  • フォアグラウンドの Worker が中断された後、ForegroundService が停止しないバグを修正しました。(b/155579898aosp/1302153

  • WorkManager が、フォアグラウンド サービスにバインドされた Worker の複数のインスタンスを実行しようとするバグを修正しました。(b/156310133aosp/1309853

バージョン 2.4.0-rc01

2020 年 6 月 24 日

androidx.work:work-*:2.4.0-rc01 がリリースされました。バージョン 2.4.0-rc01 に含まれる commit については、こちらをご覧ください

バグの修正

  • インプロセス スケジューラは、より適切な API を使用してプロセスの名前を判別するようになりました。複数のプロセスを使用するアプリをより適切にサポートするのに役立ちます。(aosp/1324732

バージョン 2.4.0-beta01

2020 年 5 月 20 日

androidx.work:work-gcm:2.4.0-beta01androidx.work:work-runtime:2.4.0-beta01androidx.work:work-runtime-ktx:2.4.0-beta01androidx.work:work-rxjava2:2.4.0-beta01androidx.work:work-testing:2.4.0-beta01 がリリースされました。バージョン 2.4.0-beta01に含まれる commit については、こちらをご覧ください

バグの修正

  • フォアグラウンドの Worker が中断された後、ForegroundService が停止しないバグを修正しました。(b/155579898aosp/1302153
  • WorkManager が、フォアグラウンド サービスにバインドされた Worker の複数のインスタンスを実行しようとするバグを修正しました。(b/156310133aosp/1309853
  • DelegatingWorkerFactory を使用するときに委任先のファクトリを動的に追加するためのサポートを追加しました。(b/156289105aosp/1309745
  • BATTERY_NOT_LOW 制約のトラッキングを、より厳密にプラットフォームに合わせて調整しました。(aosp/1312583

バージョン 2.4.0-alpha03

2020 年 4 月 29 日

androidx.work:work-*:2.4.0-alpha03 がリリースされました。バージョン 2.4.0-alpha03 に含まれる 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.Builderfinal としてマークされるようになりました。(aosp/1275037
  • WorkQuery.Builder ファクトリ メソッド withStateswithTagswithUniqueWorkNames の名前が、それぞれ fromStatesfromTagsfromUniqueWorkNames に変更されました。(aosp/1280287

バグの修正

  • デバイスのネットワーク状態をトラッキングする際に SecurityException を無視します。(b/153246136aosp/1280813

バージョン 2.4.0-alpha02

2020 年 4 月 1 日

androidx.work:work-*:2.4.0-alpha02 がリリースされました。バージョン 2.4.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • WorkRequestConstraints.setRequiresCharging(...)Constraints.setRequiresDeviceIdle(...) の両方を必要とする場合に警告する、新しい Lint ルールを追加しました。一部のデバイスでは、充電とアイドリングが同時に行われません。そのため、このようなリクエストが行われる頻度は予想よりも低くなります。(aosp/1253840

API の変更

  • WorkQuery を使用して WorkInfo をクエリする機能を追加しました。これは、デベロッパーが複数の属性を組み合わせて WorkInfo をクエリする場合に便利です。詳しくは、WorkQuery.Builder withStates(...)WorkQuery.Builder withTags(...)、または WorkQuery.Builder withUniqueWorkNames(...) をご覧ください。(aosp/1253230b/143847546

  • ListenableWorker の完了前に完了しない setForegroundAsync() の呼び出しは、返される ListenableFutureIllegalStateException によって通知されるようになりました。(aosp/1262743

バグの修正

  • PeriodicWorkRequest の間隔に無効な期間が設定されていないことを確認する lint ルールを修正しました。(aosp/1254846b/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/147873061aosp/1215915
    • JobService API を直接使用するときに WorkManager が使用する JobScheduler ID の指定。(aosp/1223567

API の変更

  • ExistingWorkPolicy.APPEND_OR_REPLACE が追加されました。これは APPEND に似ていますが、キャンセルされたか前提条件が満たされなかったチェーンを置き換えます。(b/134613984aosp/1199640

  • 今後実行する必要がある WorkRequest をトラッキングするため、カスタム RunnableScheduler を追加できる機能を提供。この機能はインプロセス スケジューラで使用します。(aosp/1203944

バグの修正

  • RxWorkersetProgress()Single<Void> という使用不可の型を返していたため、非推奨にしました。代わりに Completable を返す新しい API setCompletableProgress() を追加しました。また、新しい API への移行に役立つ新しい lint ルールを追加しました。(b/150080946aosp/1242665

バージョン 2.3.4

バージョン 2.3.4

2020 年 3 月 18 日

androidx.work:work-*:2.3.4 がリリースされました。バージョン 2.3.4 に含まれる commit については、こちらをご覧ください

バグの修正

  • 長時間実行 Worker の複数インスタンスが、10 分間の実行時間枠を超えた後に実行されるバグを修正しました。(aosp/1247484b/150553353
  • WorkManager の lint IssueRegistry の修正。Slack の @ZacSweers さん、ご協力ありがとうございました。(aosp/1217923

バージョン 2.3.3

バージョン 2.3.3

2020 年 3 月 4 日

androidx.work:work-*:2.3.3 がリリースされました。バージョン 2.3.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • 中断された Worker のスケジュールが正しく更新されないバグを修正しました。(b/150325687aosp/1246571

バージョン 2.3.2

バージョン 2.3.2

2020 年 2 月 19 日

androidx.work:work-*:2.3.2 がリリースされました。バージョン 2.3.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • WorkManager がまれに JobScheduler の 100 件のジョブ制限を超える問題を修正しました。(aosp/1226859b/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 がアクティブな場合に実行される、長時間実行 WorkerNotification のライフサイクル管理を改善しました。(aosp/1218539b/147249312
  • WorkManagerandroidx.sqlite:sqlite-framework:2.1.0 安定版に依存するようになりました。(aosp/1217729
  • ForegroundInfoforegroundServiceType を使用するときに AndroidManifest.xmlforegroundServiceType が指定されていることを確認する lint ルールを追加しました。(aosp/1214207b/147873061

バージョン 2.3.0

バージョン 2.3.0

2020 年 1 月 22 日

androidx.work:work-*:2.3.0 がリリースされました。2.3.0-rc01 からの変更はありません。バージョン 2.3.0 に含まれる 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-ktxapi 依存関係を定義するようになりました。(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.WorkManagerInitializerAndroidManifest.xml から削除されるようにする lint ルールが追加されました(aosp/1167007
  • PeriodicWorkRequestenqueueUniquePeriodicWork() の代わりに enqueue() が使用される場合の lint 警告を追加しました。(aosp/1166032

API の変更

  • ForegroundInfo では、ListenableWorker.setForegroundAsync() 使用時に notificationId を使用するように指定する必要があります。これは互換性を破る変更です。これにより、複数の長時間実行の Worker を並行して実行できます。また、WorkManager は、指定された Notification のライフタイムを適切に管理します。(b/145473554aosp/1181208asop/1181216asop/1183577

バグの修正

  • アラームが正しくクリーンアップされないという AlarmManager 実装のバグを修正しました。(aosp/1156444
  • WorkRequest の空のリストにより、誤った WorkContinuation チェーンが作成されるバグを修正しました。(b/142835274aosp/1157051

依存関係の変更

  • WorkManager で Room 2.2.2 が使用されるようになりました。

バージョン 2.3.0-beta01

2019 年 11 月 20 日

androidx.work:work-*:2.3.0-beta01 がリリースされました。バージョン 2.3.0-beta01 に含まれる 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 を簡単にキャンセルできます。特に NotificationWorkRequest のキャンセルが簡単に行えます。これは、2.3.0 の新しいフォアグラウンド API と組み合わせる予定です。
  • WorkManager は androidx.room:*:2.2.0 安定版に依存するようになりました。

API の変更

  • 基盤となるプラットフォーム API との整合性を保つため、ForegroundInfo.getNotificationType() の名前を ForegroundInfo.getForegroundServiceType() に変更しました。(b/142729893aosp/1143316

バグの修正

  • トランザクションの外部で setTransactionSuccessful() を不必要に呼び出すことで発生するバグを修正しました。これはまれな移行で発生します。(b/142580433aosp/1141737

バージョン 2.3.0-alpha02

2019 年 10 月 9 日

androidx.work:work-*:2.3.0-alpha02 がリリースされました。バージョン 2.3.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • WorkManager は、OS によって維持されるべき長時間実行の処理または重要な処理の実行をサポートするようになりました。詳しくは、ListenableWorker#setForegroundAsync()(Kotlin の場合は CoroutineWorker#setForeground())をご覧ください。(aosp/1133636

API の変更

  • DatacontainsKey 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 については、こちらをご覧ください。

新機能

  • ListenableWorkersetProgressAsync() API を使用して進行状況を設定できるようになりました。また、それに対応して、setProgress API の suspend 機能が CoroutineWorker に、Single<Void> を返す setProgressRxWorker に追加されました。Worker はこれらの新しい API を使用し、対応する getProgress API を持つ WorkInfo を介して進捗状況情報を伝えることができます。(b/79481554
  • DatacontainsKey() API を使用すると、Worker への入力データに期待される型のキーが含まれていることを検証できます。(b/117136838
  • Data.toByteArray()Data.fromByteArray() を使用して Data をシリアル化できるようになりました。Data ではバージョニングが保証されないため、このデータを保持したり、アプリ間の IPC で使用したりしないでください。これらのメソッドは、同じアプリの複数のプロセス間でのみ安全に使用できます。
  • Configuration.setInputMergerFactory を介して InputMergerFactory を指定する機能が追加されました。(b/133273159

API の変更

  • 以前に呼び出された ListenableWorker のインスタンスを WorkerFactory が返した場合、WorkManager が IllegalStateException のインスタンスをスローするようになりました。(b/139554406
  • ListenableFuture のキャンセルと、ListenableWorkeronStopped() コールバックについて、ドキュメントを更新しました。(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.gradlekotlinOptions { jvmTarget = "1.8" } を追加できます。
  • WorkManager のオンデマンド初期化が追加されました。オンデマンド初期化では、参照されたときにのみ WorkManager を作成します(b/127497100)。オンデマンド初期化に対応するためにプロジェクトを設定する手順は次のとおりです。
    1. 自動イニシャライザを無効にします
    2. カスタム Application オブジェクトに Configuration.Provider を実装します。
    3. WorkManager.getInstance() のすべての参照を WorkManager.getInstance(Context) に変更します。この変更の一環として、WorkManager.getInstance() のサポートが終了しました。オンデマンド初期化を行わない場合でも、新しい WorkManager.getInstance(Context) を呼び出すことで常により高い安全性が得られます。
  • PeriodicWorkRequest が初期遅延をサポートするようになりました。初期遅延を設定するには、PeriodicWorkRequest.BuildersetInitialDelay メソッドを使用します。b/111404867
  • DelegatingWorkerFactory を使用して 1 つ以上の登録済みの WorkerFactory にデリゲートする機能が追加されました。b/131435993
  • WorkManager がそのすべての内部ブックキーピングに使用する Executor を、Configuration.Builder.setTaskExecutor を介してカスタマイズする機能が追加されました。
  • work-testing アーティファクトで TestWorkerBuilderTestListenableWorkerBuilder を使用して、単体テストが可能な 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 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

バグの修正

  • バックアップ中に JobScheduler を使用してジョブを実行した場合にアプリがクラッシュするバグを修正しました。b/135858602

バージョン 2.1.0-beta02

2019 年 6 月 20 日

androidx.work:work-*:2.1.0-beta02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

バグの修正

  • TestListenableWorkerBuilderListenableWorker のインスタンスを作成する際に適切な 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.BuildersetInitialDelay メソッドを使用します。b/111404867

  • DelegatingWorkerFactory を使用して 1 つ以上の登録済みの WorkerFactory にデリゲートする機能が追加されました。b/131435993

  • WorkManager がそのすべての内部ブックキーピングに使用する Executor を、Configuration.Builder.setTaskExecutor を介してカスタマイズする機能が追加されました。

  • WorkRequest.keepResultsForAtLeastb/130638001)、オンデマンド初期化、PeriodicWorkRequest.Builderb/131711394)に関するドキュメントを改善しました。

バージョン 2.1.0-alpha01

2019 年 4 月 24 日

WorkManager 2.1.0-alpha01 がリリースされました。このバージョンには新しい API がいくつか含まれています。 このバージョン以降、1.x リリースにバックポートされない新機能があるため、2.x に切り替えることをおすすめします。

API の変更

  • WorkManager のオンデマンド初期化が追加されました。オンデマンド初期化では、参照されたときにのみ WorkManager を作成します(b/127497100)。オンデマンド初期化に対応するためにプロジェクトを設定する手順は次のとおりです。
    1. 自動イニシャライザを無効にします
    2. カスタム Application オブジェクトに Configuration.Provider を実装します。
    3. WorkManager.getInstance() のすべての参照を WorkManager.getInstance(Context) に変更します。この変更の一環として、WorkManager.getInstance() のサポートが終了しました。オンデマンド初期化を行わない場合でも、新しい WorkManager.getInstance(Context) を呼び出すことで常により高い安全性が得られます。
  • work-testing アーティファクトで TestWorkerBuilderTestListenableWorkerBuilder を使用して、単体テストが可能な Worker クラスと ListenableWorker クラスを作成する機能を追加しました。
    • work-testing は Kotlin を依存関係として取得するようになりましたが、このアーティファクトにはデフォルトで複数の Kotlin 拡張機能も含まれています。
  • WorkInfo に実行試行回数が追加されました。b/127290461
  • Data 型でバイトおよびバイト配列の格納と取得を行えるようになりました。ただし、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 以前の依存関係

Kotlin 拡張機能の使用方法については、ktx のドキュメントをご覧ください。
リファレンス ドキュメント: Java

Groovy

dependencies {
    def work_version = "1.0.1"

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

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

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

Kotlin

dependencies {
    val work_version = "1.0.1"

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

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

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

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

バージョン 1.0.1

バージョン 1.0.1

2019 年 4 月 9 日

WorkManager 1.0.1 がリリースされました。このリリースは 1.0.1-rc01 とまったく同じです。

今後、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 をスローする WorkerFAILED として正しくマークされるようになり、アプリプロセスがクラッシュしなくなりました。

バージョン 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.ResultListenableWorker の内部クラスになりました。これにより、Kotlin の最上位の Result クラスとのリファクタリングの競合が防止されます。これは API の互換性を破る変更です。b/120564418

API の互換性を破る変更

  • androidx.work.ResultListenableWorker の内部クラスになりました。

バージョン 1.0.0-alpha12

2018 年 12 月 5 日

このリリースには API の互換性を破る変更が含まれています。詳しくは、以下の「API の互換性を破る変更」をご覧ください。このバージョンは最初のベータ版としてリリースされる可能性があります。alpha12 ではドキュメントが広範にわたって更新されています。

API の変更

  • 新しいアーティファクトである work-rxjava2RxWorker が導入されました。これは Single<Payload> を必要とする ListenableWorker です。
  • Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、work-firebase アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。
  • PayloadResult に統合されました。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/119919774
  • WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) のバリアントが追加されました。このメソッドには API 26 が必要です。
  • Kotlin 拡張メソッドの Operation.await()ListenableFuture.await() が追加されました。
  • Operation.getException() の名前が Operation.getThrowable() に変更されました。これは互換性を破る変更です。
  • ContentUriTriggers クラスとそれを参照するメソッドの一般使用ができなくなりました。これは互換性を破る変更です。
  • API の合理化のために、WorkManagerWorkContinuationOneTimeWorkRequest に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数を Arrays.asList(...) でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。これは互換性を破る変更です。
  • WorkContinuation.combine(OneTimeWorkRequest, *) のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存の combine メソッドの可読性が高まりました。これは互換性を破る変更です。

バグの修正

  • Marshmallow 以前の実装における、実行中タスクのプロセス終了からの復元に関する信頼性が改善されました。
  • observeForever で監視されている LiveData が WorkManager で追跡されるようになりました。これは、Room ライブラリの修正を移植したものです。b/74477406
  • シリアル化されたオブジェクトがその最大サイズを超えた場合に、Data.Builder.build() が例外をスローするようになりました。以前は、この例外のスローは、オブジェクトを適切に処理できないバックグラウンド スレッドでのみ行われていました。
  • 処理の停止とキャンセルの区別がより明確になりました。getWorkInfoById()ListenableWorker.onStopped() の実行中、StateCANCELLED に設定して WorkInfo を返します。
  • ListenableWorkernull Result がエラーとして処理されるようになりました。b/120362353
  • SHIELD Tablet で API 24 を実行しているときに IllegalArgumentException がスローされることがある問題に対し、理論的な修正が行われました。b/119484416

API の互換性を破る変更

  • Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、work-firebase アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。
  • PayloadResult に統合されました。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 の合理化のために、WorkManagerWorkContinuationOneTimeWorkRequest に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数を 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 をキューに登録できるようになりました。
  • WorkManagerenqueue メソッドと cancel メソッドのすべてのバリアントが新しい Operation 型を返すようになりました。これは互換性を破る変更です。
  • enqueue のすべてのバリアントが WorkRequest の可変長引数を受け取らなくなりました。これは互換性を破る変更です。 代わりにコレクションを使用してください。Arrays.asList() を使用すると、既存のコードを変更できます。この変更は、API サーフェスとメソッドの数を減らすことを目的としています。
  • 各プロセスで WorkManager を複数回 initialize しようとすると、IllegalStateException が発生するようになりました。これは互換性を破る変更です。

バグの修正

  • work-runtime-ktx アーティファクトの WorkRequest.BuilderListenableWorker が使用されるようになりました。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() に変更されました。
  • WorkManagerenqueue メソッドと 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 のリファレンス実装は alpha02Futures パッケージで提供されます(下記の WorkManager のセクションをご覧ください)。
    • WorkerListenableWorker を拡張したもので、以前と同じように動作します(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/116253486b/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 の変更

  • WorkerFactoryWorkManager.Configuration の一部として指定することにより、実行時に独自の Worker インスタンスを作成できるようになりました。代替ファクトリは DefaultWorkerFactory です。これは、WorkManager の旧バージョンの動作と一致します。
    • WorkerNonBlockingWorker のデフォルト コンストラクタを非推奨にしました。新しいコンストラクタ(Worker(Context, WorkerParameters))を使用し、super(Context, WorkerParameters) を呼び出してください。WorkManager の将来のバージョンでデフォルト コンストラクタが削除される予定です。
  • Google 社内で新しい ListenableFuture アーティファクトの使用が開始されました(Guava 依存関係はなし)。今後のリリースで、ListenableFutures が API に導入される予定です。この変更により、NonBlockingWorker が最終的に再表示されます。
  • TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID) を使用して TestDriver の時限タスクをトリガーする機能が追加されました。b/113360060

互換性を破る変更

  • WorkerNonBlockingWorker のデフォルト コンストラクタを非推奨にしました。できるだけ早く新しいコンストラクタに移行してください。将来のバージョンでデフォルト コンストラクタが削除される予定です。

バージョン 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
  • ConstraintTrackerConcurrentModificationException を修正しました。b/112272753
  • Data.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/56
  • WorkRequest.Builder#build() を使用する場合に一意の WorkRequest を作成できるようになりました。b/111408337
  • RescheduleReceiver は、それを必要とする 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/109827628b/109758949b/80230748

  • WorkRequest をキューに再登録するとクラッシュする問題を修正しました。b/109572353

  • work-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/79996760
  • Worker.getRunAttemptCount() が特定の Worker の現在の実行数を返すようになりました。b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) を使用することで、一意の PeriodicWorkRequest をキューに登録できるようになりました。b/79600647
  • WorkManager.cancelAllWork() がすべての Worker をキャンセルするようになりました。WorkManager に依存するライブラリは、このメソッドが WorkManager.getLastCancelAllTimeMillis() を使用して前回呼び出されたタイミングを照会することで、内部状態をさらにクリーンアップすることができます。
  • 完了したジョブを内部データベースから削除するための WorkManager.pruneWork() が追加されました。b/79950952b/109710758

動作の変更

  • すべての WorkRequest で使用できる暗黙的なタグが追加されました。このタグは Worker の完全修飾クラス名です。これにより、tag なしで、または id を使用できない場合でも、WorkRequest を削除できます。b/109572351

互換性を破る変更

  • Worker.WorkerResult の名前を Worker.Result に変更しました。
  • Worker.onStoppedisCancelled パラメータが追加されました。このパラメータは、Worker が明示的にキャンセルされた場合に true に設定されます。

バージョン 1.0.0-alpha02

2018 年 5 月 24 日

バグの修正

  • State.isFinished()NullPointerException を修正しました。b/79550068
  • Application.onCreate()Worker のスケジュール変更を引き起こしていた問題を修正しました。b/79660657
  • OS で許可されるよりも多くの処理のスケジュールを設定できる問題を修正しました。b/79497378
  • Worker に関連付けられている wake lock のクリーンアップをバックグラウンド スレッドに移動しました。
  • AlarmManager の実装で、保留中のすべての処理が完了したときに適切にクリーンアップされるようになりました。
  • 英語地域以外に影響を及ぼしていたクリーンアップの SQL クエリを修正しました。b/80065360
  • Datafloat に対するサポートが追加されました。b/79443878
  • Data.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 です。