Android WorkManager
업데이트:
카테고리: Android
/태그: Worker, WorkManager, WorkRequest
WorkManager
프로세스의 종료 여부와 상관없이 실행되지만, 언제 실행될 지를 모른다.
그렇기에 로컬 서버 동기화, 이미지 업로드 등의 작업에 적합하다.
필요한 요소 3가지
- Worker
- 백그라운드에서 실행될 작업 정의
doWork()
메서드를 활용해 백그라운드에서 실행될 동작을 집어넣는다.- 응답 결과에 따라 상태값을 반환하고 결과에 따라 이후 동작을 결정할 수 있다.
- WorkRequest
- Worker에서 정의된 task를 작동시키기 위한 request를 정의
- 생성할 때 마다 반복여부와 제약사항의 내용을 담는다.
OneTimeWorkerRequest
: 1번만 실행PeriodicWorkRequest
**: 일정 기간마다 Worker를 실행 (최소간격 15분)
- WorkManager
- WorkRequest의 순서를 조정하고, 관리하고, 실행한다.
- 인스턴스를 받아와 WorkRequest를 큐에 추가해 실행한다.
// WorkRequest 작성
class RefreshDataWorker(appContext: Context, params: WorkerParameters): CoroutineWorker(appcontext, params) {
override suspend fun doWork(): Result {
// repository에 DB를 넣고 갱신을 시도
val database = getDatabase(applicationContext)
val repository = videoRepository(database)
try {
repository.refreshVideos()
} catch(e: HttpException) {
return Result.retry()
}
return Result.Success()
}
}
// 1번
val workRequest = OneTimeWorkerRequestBuilder<RefreshDataWorker>().build()
// 일정 주기로 반복
val periodWorkReqeust = PeriodicWorkRequestBuilder<RefreshDataWorker>(15, TimeUnit.MINUTES).build()
// WorkManager
private val workManager = WorkManager.getInstance(application)
workManager.enqueue(workRequest)