WorkManager の概要

WorkManager の使用を開始するには、まずライブラリを Android プロジェクトにインポートします。

アプリの build.gradle ファイルに次の依存関係を追加します。

Groovy

dependencies {     def work_version = "2.11.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"      // optional - Multiprocess support     implementation "androidx.work:work-multiprocess:$work_version" }

Kotlin

dependencies {     val work_version = "2.11.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")      // optional - Multiprocess support     implementation("androidx.work:work-multiprocess:$work_version") }

依存関係を追加して Gradle プロジェクトを同期したら、実行する作業を定義します。

作業を定義する

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

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 work 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 work finished successfully with the Result      return Result.success();    } }

doWork() から返された Result は、作業が成功したかどうかと、失敗した場合はその作業を再試行するかどうかを WorkManager サービスに通知します。

  • Result.success(): 作業は正常に完了しました。
  • Result.failure(): 作業は失敗しました。
  • Result.retry(): 作業が失敗したため、再試行ポリシーに従って別の時間に再試行されます。

WorkRequest を作成する

作業を定義したら、実行されるように WorkManager サービスでスケジュールを設定する必要があります。WorkManager を使用すると、作業スケジュールを柔軟に設定できます。スケジュールを設定して、作業を一定の間隔で定期的に実行することも、1 回限り実行することもできます。

作業スケジュールをどのように設定する場合でも、常に WorkRequest を使用します。Worker が作業単位を定義するのに対し、WorkRequest とそのサブクラスは、作業を実行する方法とタイミングを定義します。最も単純なケースでは、次の例に示すように、OneTimeWorkRequest を使用できます。

Kotlin

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

Java

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

システムに WorkRequest を送信する

最後に、enqueue() メソッドを使用して WorkRequestWorkManager に送信する必要があります。

Kotlin

WorkManager     .getInstance(myContext)     .enqueue(uploadWorkRequest)

Java

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

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

次の手順

このスタートガイドで説明した内容は、ごく一部にすぎません。WorkRequest には追加情報(作業の実行時の制約、作業に対する入力、遅延、作業の再試行に関するバックオフ ポリシーなど)を含めることもできます。次のセクションの作業リクエストを定義するでは、これらのオプションについてさらに詳しく説明します。また、一意の作業と繰り返し作業のスケジュールを設定する方法についても説明します。

参考情報

ガイド ドキュメントのほかに、入門用のブログ、コードラボ、コードサンプルも複数用意されています。

サンプル

  • Sunflower(WorkManager などの各種のアーキテクチャ コンポーネントを使用したおすすめの方法を示すデモアプリ)

Codelab

ブログ