WorkManager の使用を開始するには、まずライブラリを Android プロジェクトにインポートします。
アプリの 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") }
依存関係を追加して 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 = OneTimeWorkRequestBuilderU<ploadWorker(>) .build()
Java
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
システムに WorkRequest を送信する
最後に、enqueue()
メソッドを使用して WorkRequest
を WorkManager
に送信する必要があります。
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
Java
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
ワーカーの正確な実行タイミングは、WorkRequest
とシステムの最適化で使用される制約によって異なります。WorkManager は、こうした制約の下で最善の動作を行うように設計されています。
次の手順
このスタートガイドで説明した内容は、ごく一部にすぎません。WorkRequest
には追加情報(作業の実行時の制約、作業に対する入力、遅延、作業の再試行に関するバックオフ ポリシーなど)を含めることもできます。次のセクションの作業リクエストを定義するでは、これらのオプションについてさらに詳しく説明します。また、一意の作業と繰り返し作業のスケジュールを設定する方法についても説明します。
参考情報
ガイド ドキュメントのほかに、入門用のブログ、コードラボ、コードサンプルも複数用意されています。
サンプル
- WorkManagerSample(シンプルな画像処理アプリ)
- Sunflower(WorkManager などの各種のアーキテクチャ コンポーネントを使用したおすすめの方法を示すデモアプリ)
Codelab
- WorkManager(Kotlin)および(Java)の操作
- 高度な WorkManager(Kotlin)
ブログ
- WorkManager の紹介
- WorkManager の基礎
- WorkManager と Kotlin
- WorkManager の周期性
- WorkManager のカスタマイズ - 基礎知識
- Dagger で WorkManager をカスタマイズする