今回は、AndroidのWorkManager
でバックグラウンド処理を行う方法を解説します。
概要
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)