Kotlin : 작업 스케쥴링
2023. 3. 12. 22:26ㆍ[Android APP] feat. Kotlin/Kotlin 언어 기초
1. 의존성 추가
implementation 'androidx.work:work-runtime-ktx:$version'
2. Worker 서브 클래스 생성
private const val TAG = "PollWorker"
class PollWorker(val context : Context, workerParams : WorkerParameters) :
Worker(context, workerParams){
override fun doWork(): Result {
Log.i(TAG, "Work request Triggered")
return Result.success()
}
}
- Worker 서브 클래스에는 백그라운드에서 수행하고자 하는 작업을 처리하는 로직을 넣는다.
- 그리고 이 클래스가 준비되면 WorkRequest의 서브 클래스 중 하나를 사용해서 작업 요청을 생성한다.
- Work 서브 클래스에는 context와 WorkParameter가 필요하다.
- doWork() 함수는 백그라운드 스레드에서 호출된다. 따라서 이 함수는 오래 실행되는(최대 10분) 작업을 할 수 있다.
- 이 함수의 반환 값은 ListenableWorker.Result 클래스의 인스턴스이며, 함수의 작업 상태를 나타낸다.
작업 상태로는 success(성공), failure(실패), retry(일시적인 에러, 작업을 다시 실행)가 있다. - PollWorker는 백그라운드 작업을 실행하는 방법만 안다. 따라서 작업을 스케줄링 하려면 다른 컴포넌트가 필요하다.
3. WorkRequest
- Worker의 실행을 스케줄링하려면 추상 클래스인 WorkRequest가 필요하다.
- 그러므로 실행해야 하는 작업의 유형에 따라 WorkRequest의 서브 클래스 중 하나를 사용해야 한다.
- 한번만 실행하는 작업에서는 OneTimeWorkRequest를 사용하며, 주기적으로 실행하는 작업은 PeriodicWorkRequest를 사용한다.
- OneTimeWorkRequest 클래스는 자신의 중첩 클래스인 Builder를 사용해서 인스턴스를 생성한다. 이때 작업이 실행될 Worker 클래스를 생성자에 전달한다.
- 그 다음에 WorkManager 클래스를 사용해서 OneTimeWorkRequest 인스턴스를 스케쥴링해야 한다.
- 이 때 getInstance() 함수를 호출해 WorkManager의 싱글톤 인스턴스를 얻은 후 OneTimeWorkRequest 인스턴스를 인자로 전달해서 enqueue를 호출한다.
val workRequest = OneTimeWorkRequest.Builder(PollWorker::class.java).setConstraints(constraints).build()
WorkManager.getInstance().enqueue(workRequest)
4. 제약 걸기(Constraints 클래스)
- 대부분의 경우에 백그라운드에서 실행하고자 하는 작업은 네트워크와 연결된다.
- 예를 들어 사용자가 아직 보지 않은 새로운 정보를 네트워크를 통해 폴링하거나, 로컬 데이터베이스의 변경 데이터를 원격 서버에 저장하는 작업은 불필요하게 비용이 드는 데이터 사용을 피해야 한다. 따라서 데이터 이용비가 들지 않는 네트워크 와이파이에 장치가 연결될 때 하는 것이 좋다.
- Constraints 클래스를 사용하면 특정 제약 조건을 작업 요청에 추가할 수 있다.
- 특정 네트워크 타입을 요구하거나 충분히 충전된 배터리나 장치의 충전기 연결과 같은 것들을 요구할 수 있다.
val constraints = Constraints.Builder().setRequiredNetworkType(NetworkType.UNMETERED).build()
반응형
'[Android APP] feat. Kotlin > Kotlin 언어 기초' 카테고리의 다른 글
30. 람다 표현식 (0) | 2022.03.13 |
---|---|
29. 예외처리 ( try-catch, finally) (0) | 2022.03.13 |
28. Safe Cast, Unsafe Cast 연산자 (0) | 2022.03.13 |
27. 중첩, 내부 클래스 (0) | 2022.03.13 |
26. 접근 제한자 (0) | 2022.03.13 |