Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

WorkManager の概要

WorkManager を使用すると、簡単にタスクを設定してシステムに引き渡し、指定した条件で実行させることができます。 WorkManager がタスクに適したソリューションかどうかを確認するには、バックグラウンド処理ガイドをご覧ください。

このガイドでは、以下の方法を学習できます。

  • WorkManager を Android プロジェクトに追加する
  • バックグラウンド タスクを作成する
  • タスクを実行する方法とタイミングを設定する
  • タスクをシステムに引き渡す

WorkManager の機能(繰り返し作業の処理、作業チェーンの作成、作業のキャンセルなど)について詳しくは、入門ガイドをご覧ください。

WorkManager を Android プロジェクトに追加する

WorkManager ライブラリを Android プロジェクトにインポートするには、アプリの build.gradle ファイルに次の依存関係を追加します。

dependencies {
  def work_version = "2.4.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"
  }

バックグラウンド タスクを作成する

タスクは、Worker クラスを使用して定義されます。 doWork() メソッドは、WorkManager から提供されるバックグラウンド スレッドで同期的に実行されます。

バックグラウンド タスクを作成するには、Worker クラスを拡張して doWork() メソッドをオーバーライドします。 たとえば、画像をアップロードする Worker を作成するには、以下のようにします。

Kotlin

    class UploadWorker(appContext: Context, workerParams: WorkerParameters)
        : Worker(appContext, workerParams) {

        override fun doWork(): Result {
            // Do the work here--in this case, upload the images.

            uploadImages()

            // Indicate whether the task finished successfully with the Result
            return Result.success()
        }
    }
    

Java

    public class UploadWorker extends Worker {

        public UploadWorker(
            @NonNull Context context,
            @NonNull WorkerParameters params) {
            super(context, params);
        }

        @Override
        public Result doWork() {
          // Do the work here--in this case, upload the images.

          uploadImages()

          // Indicate whether the task finished successfully with the Result
          return Result.success()
        }
    }
    

doWork() から返される Resultにより、WorkManager に以下の情報が伝えられます。

  • Result.success(): タスクが正常に終了したかどうか
  • Result.failure(): タスクが失敗したかどうか
  • Result.retry(): 後でタスクを再試行する必要があるかどうか

タスクを実行する方法とタイミングを設定する

Worker が作業単位を定義するのに対し、WorkRequest は作業を実行する方法とタイミングを定義します。 タスクには、1 回だけ実行されるものと、定期的に実行されるものがあります。1 回限りの WorkRequest には OneTimeWorkRequest、定期的な作業には PeriodicWorkRequest を使用します。 繰り返し作業のスケジュール設定について詳しくは、繰り返し作業に関するドキュメントをご覧ください。

UploadWorker の WorkRequest を作成する場合の最もシンプルな例を以下に示します。

Kotlin

    val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
            .build()
    

Java

    OneTimeWorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class)
            .build()
    

WorkRequest には追加情報(タスクの実行時の制約、作業に対する入力、遅延、作業の再試行に関するバックオフ ポリシーなど)を含めることもできます。これらのオプションについて詳しくは、作業の定義ガイドをご覧ください。

タスクをシステムに引き渡す

WorkRequest を定義した後、WorkManagerenqueue() メソッドを使用してスケジュールを設定できます。

Kotlin

    WorkManager.getInstance(myContext).enqueue(uploadWorkRequest)
    

Java

    WorkManager.getInstance(myContext).enqueue(uploadWorkRequest);
    

ワーカーの正確な実行タイミングは、WorkRequest とシステムの最適化で使用される制約によって異なります。WorkManager は、こうした制約の下で最善の動作を行うように設計されています。

次の手順