The Android Developer Challenge is back! Submit your idea before December 2.

WorkManager

WorkManager API を使用すると、延期可能な(ただし確実に実行される必要がある)非同期タスクのスケジュールを簡単に設定できます。また、タスクを作成して WorkManager に引き渡し、作業の制約が満たされたときに実行させることができます。詳しくは、リファレンス ドキュメントをご覧ください。

依存関係の宣言

WorkManager への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

dependencies {
  def work_version = "2.2.0"

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

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

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

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

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

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

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

バージョン 2.3.0-alpha01

2019 年 8 月 22 日

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

新機能

  • 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

2019 年 8 月 15 日

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

このリリースは 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 がリリースされました。このバージョンに含まれているコミットについては、こちらをご覧ください。

バグの修正

  • サービスを通常より早くシャットダウンし、まれに RejectedExecutionException を発生させる、AlarmManager の実装のバグを修正しました。aosp/1092374b/138238197
  • 一部のデバイスで JobScheduler API を使用している場合に発生する NullPointerException の回避策を追加しました。aosp/1091020b/138364061b/138441699

バージョン 2.2.0-beta02

2019 年 7 月 19 日

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

バグの修正

  • 2.2.0-beta01 で導入された意図しない JaCoCo 依存関係を削除しました。

バージョン 2.2.0-beta01

2019 年 7 月 17 日

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

新機能

  • androidx.work:work-gcm:2.2.0-beta01 は、Google Play 開発者サービスが API レベル 22 以下で使用可能な場合に GCMNetworkManager をスケジューラとして使用できるようにするための新しい Maven アーティファクトです。これはオプションの依存関係であり、古い API バージョンにおけるバックグラウンド処理の信頼性とパフォーマンスの向上に役立ちます。アプリで Google Play 開発者サービスを使用している場合、この依存関係を Gradle ファイルに追加することで、GCMNetworkManager が自動的にサポートされるようになります。Play 開発者サービスを使用できない場合、古いデバイスではこれまでどおり WorkManager が AlarmManager に切り替わります。

バグの修正

  • Nvidia Shield K1 タブレットでネットワークの状態を追跡しているときに IllegalArgumentException が発生する問題を修正しました。aosp/1010188

バージョン 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)。オンデマンド初期化に対応するためにプロジェクトを設定する手順は次のとおりです。
    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 がリリースされました。このバージョンに含まれているコミットについては、こちらをご覧ください。

バグの修正

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

バージョン 2.1.0-beta02

2019 年 6 月 20 日

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

バグの修正

  • TestListenableWorkerBuilderListenableWorker のインスタンスを作成する際に適切な WorkerFactory を使用するようになりました。b/135275844
  • プロセスの終了が原因で WorkRequest の実行時間にブレが生じるバグを修正しました。b/135272196

バージョン 2.1.0-beta01

2019 年 6 月 13 日

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

バグの修正

  • WorkManager が Room 2.1.0 に依存するようになりました。これにより、データベースに関する問題がいくつか解決します。
  • メインスレッド上の一部の起動ディスク I/O を削除しました。
  • 制約の追跡時の潜在的なデッドロックを修正しました。b/134361006
  • WorkManager に起因する無効なジョブをあらかじめキャンセルするようにしました。b/134058261
  • 不正な動作をするデバイスに対処するために、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

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
  • API 23 ではフレックス タイムがサポートされないことを示すように PeriodicWorkRequest のドキュメントを更新しました。
  • Kotlin ドキュメント内の無効なリンクをいくつか修正しました。

バージョン 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
     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"
      }
    

バージョン 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

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-rxjava2)によって RxWorker が導入されました。これは、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 を返します。
  • ListenableWorker において、null 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 サーフェスとメソッドの数を減らすことを目的としています。
  • 各プロセスで initialize WorkManager を複数回実行しようとすると、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 の可変長引数を受け取らなくなりました。
  • 各プロセスで initialize WorkManager を複数回実行しようとすると、IllegalStateException が発生するようになりました。

バージョン 1.0.0-alpha10

2018 年 10 月 11 日

このリリースでは、デベロッパーが管理する非同期タスクがサポートされています。また、このリリースには API の互換性を破る変更が含まれています。詳しくは、以下の「API の互換性を破る変更」をご覧ください。

Google は、WorkManager がアルファ版の最終段階に入ると予想しています。また、ベータ版では安定版 API になると期待しています。公開バグトラッカーでフィードバックをお送りください。

API の変更

  • デフォルトの deprecated コンストラクタをはじめ、以前に Worker したすべてのメソッドとクラスが削除されました。これは 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 で修正します。

    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 の変更

  • 実行時に独自の Worker インスタンスを作成できるようになりました(WorkerFactoryWorkManager.Configuration の一部として指定)。代替ファクトリは 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
  • デバイスのスリープの後に 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 の変更

  • getStatusesSync()WorkContinuation.getStatuses() の同期バージョン)が追加されました。
  • ユーザーが開始したキャンセルと 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 パッケージから androix.work パッケージに移動されました。以前の拡張機能のサポートが終了し、将来のバージョンで削除される予定です。
  • Configuration.withExecutor() のサポートが終了しました。代わりに Configuration.setExecutor() を使用してください。

バージョン 1.0.0-alpha01

2018 年 5 月 8 日

WorkManager は、制約に対応した保証済みのバックグラウンド作業のスケジュール設定と実行を簡素化します。Navigation の初期リリースは 1.0.0-alpha01 です。