Android/WorkManager

WorkManager + Coroutine

${Harvey} 2022. 11. 21. 22:27

 

build.gradle

implementation("androidx.work:work-runtime-ktx:2.7.1")
 

MainActivity.kt

// WorkManager + Coroutine

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

        val workManager = OneTimeWorkRequestBuilder<WorkManager2>().build()
        WorkManager.getInstance(this).enqueue(workManager)

    }
}
 

WorkManager1.kt

class WorkManager1(context : Context, workerParameters: WorkerParameters) : Worker(context, workerParameters){
    override fun doWork(): Result {

        return Result.success()
    }
}
 

WorkManager2.kt

class WorkManager2(context : Context, params : WorkerParameters) : CoroutineWorker(context, params){
    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())
        }
    }

}
 

결과: Coroutine을 사용하여 test1(),test2()가 순차적(비동기식) 으로 코드가 실행된다.