일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 디자인패턴
- 디자인패턴 #
- 팩토리 메소드
- Abstract Factory
- 빌터패턴
- El
- Singleton
- Design Pattern
- a
- designPattern
- factory method
- Kotlin
- 함수형프로그래밍
- r
- Observer Pattern
- F
- 추상 팩토리
- Functional Programming
- builderPattern
- 코틀린
- PrototypePattern
- ㅋㅁ
- 싱글톤
- 추상팩토리패턴
- 옵저버 패턴
- 프로토타입 패턴
- ㅓ
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Worker 중간 진행률 및 관찰 본문
WorkManager 2.3.0-alpha01에 작업자의 중간 진행률을 설정하고 관찰하기 위한 최고 수준의 지원이 추가되었습니다.
앱이 포그라운드에 있을 때
Worker 실행 중이면 WorkInfo의 LiveData를 반환하는 API를 사용하여 이 정보를 사용자에게 표시할 수도 있습니다.
public abstract class Worker extends ListenableWorker {...}
ListenableWorker에서 setProgressAsync() API를 지원합니다.
이는 중간 진행률을 유지하는 데 사용됩니다. 개발자는 이러한 API를 사용하여 UI에서 관찰할 수 있는 중간 진행률을 설정할 수 있습니다.
진행률은 Data 유형으로 표시되며 이 유형은 속성의 직렬화 컨테이너입니다(input 및 output과 유사하며 동일한 제한사항이 적용됨).
진행률 정보는 ListenableWorker 실행 중에만 관찰하고 업데이트됩니다.
실행이 완료된 후에는 ListenableWorker에 진행률을 설정하려는 시도가 무시됩니다.
getWorkInfoBy…() 또는 getWorkInfoBy…LiveData() 메서드 중 하나를 사용하여 진행률 정보를 관찰할 수도 있습니다.
getWorkInfoBy…() 또는 getWorkInfoBy…LiveData() 는 Data를 반환하는 새 getProgress() 메서드가 있는 WorkInfo의 인스턴스를 반환합니다.
ListenableWorker 또는 Worker를 사용하는 자바 개발자의 경우 setProgressAsync() API는 ListenableFuture<Void>를 반환합니다.
데이터베이스에 진행률 정보를 저장하는 단계가 업데이트 절차에 포함된다는 점을 고려하면 진행률 업데이트는 비동기입니다.
Kotlin에서는 CoroutineWorker 객체의 setProgress() 확장 함수를 사용하여 진행률 정보를 업데이트할 수 있습니다.
이 예는 간단한 ProgressWorker를 보여줍니다. Worker는 시작 시 진행률을 0으로 설정하고 완료 시 진행률 값을 100으로 업데이트합니다.
import android.content.Context
import androidx.work.CoroutineWorker
import androidx.work.Data
import androidx.work.WorkerParameters
import kotlinx.coroutines.delay
class ProgressWorker(context: Context, parameters: WorkerParameters) :
CoroutineWorker(context, parameters) { // 코루틴 워커 확장
companion object {
const val Progress = "Progress"
private const val delayDuration = 1L
}
override suspend fun doWork(): Result { // 지연함수
val firstUpdate = workDataOf(Progress to 0)
val lastUpdate = workDataOf(Progress to 100)
setProgress(firstUpdate)
delay(delayDuration) // 이 라인에서 작업을 처리한다.
setProgress(lastUpdate)
return Result.success()
}
}
관찰하기
getWorkInfoBy…() 또는 getWorkInfoBy…LiveData() 메서드를 사용하여
WorkInfo 참조를 가져와서 UI 컴포넌트에서 관찰하면 된다.
WorkManager.getInstance(applicationContext)
// requestId is the WorkRequest id
.getWorkInfoByIdLiveData(requestId)
.observe(observer, Observer { workInfo: WorkInfo? ->
if (workInfo != null) {
val progress = workInfo.progress
val value = progress.getInt(Progress, 0)
// Do something with progress information
}
})
'Android Jetpack Architecture > Workmanager' 카테고리의 다른 글
WorkChaining (0) | 2021.03.12 |
---|---|
작업 상태 확인후 관리하고 취소까지 (0) | 2021.03.12 |
WorkRequest 만들기. (0) | 2021.03.12 |
Workmanager codelab (0) | 2021.03.12 |
Workmanager 기본 사용법 (0) | 2021.03.11 |