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

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

[JETPACK개론] WorkManager(4) + 작업진행률 관찰
Android/JETPACK

[JETPACK개론] WorkManager(4) + 작업진행률 관찰

2022. 9. 14. 23:59

WorkManager는 앞서 포스팅했던 내용 이외에도 getWorkInfoByLiveData메소드 중 하나를 사용하여

현재 작업 진행률 정보를 관찰할 수도 있다.

 

CoroutineWorker 객체의 setProgress함수를 사용하여 진행률 정보를 업데이트 할 수 있다.

공식문서를 봐도 getWorkInfoBy..() 또는 getWorkInfoByLiveData() 메소드 중 하나를 사용하여 정보를 관찰할 수 있고

이 메소드는 Data를 반환하는 새 getProgress() 메소드가 있는 WorkInfo의 인스턴스를 반환한다고 나와있다!!

 

다음 예시를 살펴보자!

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

    companion object{
        const val HowMuch = "progress"
    }

    override suspend fun doWork(): Result {

        //i -> 1,2,3,4,5,6,7,8,9,10 / 10 20 30
        for(i in 1..10){
            val result = workDataOf(HowMuch to i*10)
            setProgress(result)
            delay(1000)
        }

        return Result.success()
    }
}

현재 진행 상황을 1부터 10까지 표시하되, 10퍼센트 부터 인 것을 나타내기 위하여 *10을 하여 표현하였다.

이를 setProgress() 에 값을 넣어 현재 진행률 정보를 업데이트하였다.

이제 MainActivity에서 이 값을 관찰하여 현재 진행률을 반환해보겠다.

val workManagerText = OneTimeWorkRequestBuilder<WorkManagerTest>().build()
WorkManager.getInstance(this).enqueue(workManagerText)

WorkManager.getInstance(this)
    .getWorkInfoByIdLiveData(workManagerText.id)
    .observe(this, Observer {workInfo: WorkInfo? ->
        val progress = workInfo!!.progress
        val value = progress.getInt(HowMuch, 0)
        if(value != 0){
            Log.d("MainActivity", value.toString())
        }
        if(value == 100){
            Log.d("MainActivity", "종료")
        }
    })

공식문서를 살펴보면 getWorkInfoByLiveData를 통해 관찰할 수 있다고 하였는데 위의 코드를 보면 알 수 있다.

LiveData의 값을 observe를 통해 관찰하였고, 이 메소드는 새 진행률이 담겨있는 WorkInfo를 반환한다고도 나와있다.

 

위의 코드에서 workInfo의 progress를 불러왔고 이를 로그로 찍은 결과는 다음과 같다!

결과화면

이렇게 getWorkInfoBy..() 또는 getWorkInfoByLiveData() 메소드를 사용하여 WorkInfo를 반환하여 ui에서 현재 진행률을 관찰할 수 있다!!

 

 

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개론] Navigation  (0) 2022.09.18
[JETPACK개론] WorkManager(5) + 주기적작업, 고유작업  (0) 2022.09.17
[JETPACK개론] WorkManager(3) + Chaining, Coroutine  (0) 2022.09.09
[JETPACK개론] WorkManager(2) + Sending, Receiver Data  (0) 2022.09.08
[JETPACK개론] WorkManager(1)  (4) 2022.09.07
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] Navigation
    • [JETPACK개론] WorkManager(5) + 주기적작업, 고유작업
    • [JETPACK개론] WorkManager(3) + Chaining, Coroutine
    • [JETPACK개론] WorkManager(2) + Sending, Receiver Data
    쏭식
    쏭식

    티스토리툴바