【Kotlin/Android】CoroutineWorkerの使い方!WorkManager

この記事からわかること

  • Android Studio/KotlinWorkManager使い方
  • CoroutineWorker実装する方法
  • 非同期処理をWorkManagerで使用するには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

CoroutineWorkerとは?

CoroutineWorkerはWorkManagerライブラリに含まれておりCoroutine(Kotlin Coroutines)を使用して非同期タスクを実行するためのWorkerのサブクラスです。通常のWorkerクラスではKotlin Coroutinesに対応していないのでKotlin Coroutinesを使用した非同期タスクを絡ませたい場合はCoroutineWorkerを使用します。

実装方法

CoroutineWorkerは独自のワーカーサブクラスを実装する際にWorkerの代わりに継承させます。Workerでは通常のメソッドだったdoWorkCoroutineWorkerではsuspendが付与されています。

suspendが付与されていることでdoWorkメソッド内で別の非同期処理であるsuspend関数をそのまま実行することができます。

class MyCoroutineWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {

        Log.d("Worker", "開始")

        // 5秒かかる処理を待機してデータを取得できる
        val data = fetchDataFromRemote()

        Log.d("Worker", "終了 ${data}" )

        return Result.success()
    }

    suspend fun fetchDataFromRemote(): String {
        delay(5000) // 5秒後
        return "リモートサーバーからフェッチ"
    }

    companion object {

        private const val INPUT_STRING_KEY = "INPUT_STRING_KEY"
        public fun createRequest(text: String): WorkRequest =
            OneTimeWorkRequest.Builder(MyCoroutineWorker::class.java)
                .setInputData(createData(text))
                .build()

        private fun createData(text: String): Data = Data.Builder()
            .putString("INPUT_STRING_KEY", text)
            .build()
    }
}

呼び出す際は非同期処理であることを意識する必要はなく通常のWorkerのようにenqueueメソッドで実行することができます。

// WorkRequestを作成し
val workRequest = MyCoroutineWorker.createRequest("Hello World")

// WorkManagerにWorkRequestをエンキュー
WorkManager.getInstance(this).enqueue(workRequest)

CoroutineWorkerを使用しなくてもCoroutine処理を実装することはできますが、だいぶスッキリ記述できるのは大きなメリットですね。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index