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 |