쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ViewModel
  • 프로젝트회고
  • livedata
  • 상속
  • 자바
  • 코테
  • Jetpack
  • AAC
  • 변수
  • 리사이클러뷰
  • 알고리즘
  • DataBinding
  • 객체지향
  • 배열
  • 코틀린코테
  • 컴포즈
  • Adapter
  • Room
  • 메소드
  • 자료구조
  • mvvm
  • workmanager
  • Android
  • 코드업100제
  • 기초100제
  • 코틀린
  • 백준
  • Kotlin
  • compose
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

[JETPACK개론] WorkManager(3) + Chaining, Coroutine
Android/JETPACK

[JETPACK개론] WorkManager(3) + Chaining, Coroutine

2022. 9. 9. 23:59

WorkManager Chaining

WorkManager의 첫 글에서 작업순서를 정해주기도 한다고 하였다.

예를 들어

작업 A, B, C가 있다고 가정해보자.

A, B 는 순서 상관 없이 실행되도 괜찮지만

C는 무조건 A / B가 모두 실행된 뒤에 실행되어야 한다고 한다면 작업순서를 정해줄 수 있어야 한다.

 

다음과 같은 WorkManager를 B, C까지 만들어주자.

class WorkManagerA(context : Context, workerParameters: WorkerParameters) : Worker(context, workerParameters) {

    override fun doWork(): Result {

        for(i in 0..3){
            sleep(1000)
            Log.d("WorkManagerA", i.toString())

        }

        return Result.success()
    }

}

위와 같은 WorkManager가 B, C가 있다고 가정해보자.

val workManagerA = OneTimeWorkRequestBuilder<WorkManagerA>().build()
val workManagerB = OneTimeWorkRequestBuilder<WorkManagerB>().build()
val workManagerC = OneTimeWorkRequestBuilder<WorkManagerC>().build()

여기서 MainActivity에서는 다음과 같이 순서를 정의해줄 수 있다.

WorkManager.getInstance(this)
    .beginWith(listOf(workManagerA, workManagerB))
    .then(workManagerC)
    .enqueue()

보통 getInstance(this).enqueue를 통해 실행하였지만 위와 같이

.beginWith를 통해 먼저 실행될 작업들을 적어주고

.then을 통해 그 다음 실행되어야 할 작업을 적어준 뒤, .enqueue()를 통해 실행한다면 다음과 같이 

목적대로 순서에 맞게끔 실행되는 것을 확인할 수 있다!!

WorkManager + Coroutine

안드로이드 공식문서를 확인해보면 WorkManager는 kotlin 사용자게에 코루틴을 위한 지원을 제공한다고 나와있다.

따라서 WorkManager와 코루틴을 같이 사용하는 간단한 실습을 진행해보자.

원래 기존의 WorkManager를 다음과 같이 선언해주었다.

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

        return Result.success()
    }
}

Worker를 상속받아 WorkManager를 만들어줬지만 코루틴과 같이 사용하는거라면 CoroutineWorker를 상속받아야 한다.

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

    override suspend fun doWork(): Result {

        //Dispatchers 가 디폴트인데 이것을 이렇게 변경해줄 수 있음
        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())
        }
    }
}

이제 오버라이드한 doWork메소드가 suspend가 된 것을 확인할 수 있다.

왜냐하면 코루틴을 사용하기 때문이다.

public open val coroutineContext: CoroutineDispatcher = Dispatchers.Default

CoroutineWorker에 들어가보면 Dispatchers가 default로 되어있는데

이를 위에 WorkManager에서 Dispatchers의 속성을 변경시켜 줄 수 있다.

위와 같이 로그도 잘 찍히는 것을 확인할 수 있다!!

 

WorkManager Chaining

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com

 

WorkManager + Coroutine

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'Android > JETPACK' 카테고리의 다른 글

[JETPACK개론] WorkManager(5) + 주기적작업, 고유작업  (0) 2022.09.17
[JETPACK개론] WorkManager(4) + 작업진행률 관찰  (0) 2022.09.14
[JETPACK개론] WorkManager(2) + Sending, Receiver Data  (0) 2022.09.08
[JETPACK개론] WorkManager(1)  (4) 2022.09.07
[JETPACK개론] ROOM(3)  (0) 2022.09.05
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] WorkManager(5) + 주기적작업, 고유작업
    • [JETPACK개론] WorkManager(4) + 작업진행률 관찰
    • [JETPACK개론] WorkManager(2) + Sending, Receiver Data
    • [JETPACK개론] WorkManager(1)
    쏭식
    쏭식

    티스토리툴바