WorkManager の概要

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

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

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

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

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

WorkManager リリースノートに記載されている手順に沿って、Java または Kotlin の WorkManager の依存関係を Android プロジェクトに追加します。

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

タスクは 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);
    

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

次のステップ