WorkManager + Coroutine

최대환·2023년 12월 31일
1

WorkManager와 코루틴을 함께 사용하려면 CoroutineWorker를 이용해야 합니다.코루틴을 사용해서 비동기 작업을 수행할 수 있게 도와줍니다.
또한, 작업을 수행하는 스레드를 변경하고 싶을 경우에는 withContext(Dispatchers.IO)를 사용하면 됩니다. 이는 IO 바운드 작업(파일 또는 네트워크 작업 등)을 수행할 때 유용합니다.
아래는 CoroutineWorker를 이용하여 코루틴과 WorkManager를 함께 사용하는 예제입니다.

class WorkManagerB (context : Context, workerParameters: WorkerParameters)  : CoroutineWorker(context, workerParameters){

    override suspend fun doWork(): Result {
        withContext(Dispatchers.IO){
            test1()
            test2()
        }

        return Result.success()
    }

    suspend fun test1() {
        for(i in 1..3) {
            delay(1000)
            Log.d("WorkManager2 test1", i.toString())
        }
    }

    suspend fun test2() {
        for(i in 1..3) {
            delay(1000)
            Log.d("WorkManager2 test2", i.toString())
        }
    }
}

그리고 이렇게 작성한 WorkManagerB를 MainActivity에서 실행시키는 코드는 아래와 같습니다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val workManagerB = OneTimeWorkRequestBuilder<WorkManagerB>().build()

        WorkManager.getInstance(this).enqueue(workManagerB)

    }
}

WorkManager와 코루틴을 함께 사용하면, 비동기 작업을 더욱 효율적으로 관리할 수 있습니다.

profile
나의 개발지식 output 공간

0개의 댓글