Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

【Android】WorkManagerでバックグラウンド処理を行う

今回は、AndroidWorkManagerでバックグラウンド処理を行う方法を解説します。

概要

WorkManager を使用すると、処理をバックグラウンドで実行できます。WorkManager を使用すると、以下のメリットがあります。

  • 完了に時間がかかる処理でもアプリが止まらない。
  • アプリを終了しても WorkManager の処理は継続する。

よって、WorkManager は以下のような場合に使われます。

  • ファイルのダウンロード/アップロード
  • ログのアップロード

ライブラリを追加する

WorkManager を使用するため、以下のようにライブラリを追加します。

dependencies {
    val work_version = "2.7.1"
    // Kotlin + coroutines
    implementation("androidx.work:work-runtime-ktx:$work_version")
}

作業を定義する

まず、WorkManager に処理させたい作業を定義します。Worker を継承して、doWork をオーバーライドします。そして、オーバーライドした doWork の中で、WorkManager に処理させたい作業を実行します。

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

   override fun doWork(): Result {

       // 重い処理
       doHeavyWork()

       // 処理結果の返却
       return Result.success()
   }
}

処理の後に処理結果を返します。なお、返せる処理結果を以下の通りです。

  • Result.success() : 作業成功。
  • Result.failure() : 作業失敗。
  • Result.retry() : 作業をリトライする。

WorkRequestを作成する

次に、さきほど定義した作業から WorkRequest を作成します。WorkRequest の作成方法は、以下の 2 通りあります。

val heavyWorkRequest: WorkRequest =
    OneTimeWorkRequestBuilder<HeavyWorker>().build()
val heavyWorkRequest = OneTimeWorkRequest.from(HeavyWorker::class.java)

WorkRequestを登録する

最後に、WorkManager に WorkRequest を登録します。登録されると、WorkRequest の作業がバックグラウンドで実行されます。

WorkManager
    .getInstance(context)
    .enqueue(heavyWorkRequest)

参考

WorkManager の概要