WorkManager는 공식문서를 확인해보면 지속적인 작업에 권장되는 솔루션이라고 나온다.
앱이 다시 시작되거나 시스템이 재부팅될 때 작업이 예약된 채로 남아 있으면 그 작업은 유지된다고 설명하고 있다.
이렇게 공식문서만 살펴보면 이해가 잘 안되는 경우가 있다.
사용자가 앱을 나가도 오래 걸리는 작업같은 경우에는 앱을 나가버리면 보통 그 작업이 멈춰버린다.
이 때 WorkManager를 사용할 수 있다.
이렇기 때문에 지속적인 작업에 권장되는 솔루션이라고 하는 것이다.
또한 WorkManager는 코루틴을 지원하고, 작업 순서 설정이 가능하다.
예를 들어
A, B작업은 첫 번째로 실행되는 두 번째로 실행되는 상관이 없지만
C라는 작업은 꼭 세 번째에 실행되어야 한다고 가정하였을 때 이 때 작업 순서를 정해줄 수 있다.
바로 간단한 예시를 통해 WorkManager가 무엇인지 정확히 알아보자.
class SimpleTread : Thread(){
override fun run(){
super.run()
for(i in 1..10){
Log.d("MainActivty", "$i")
sleep(1000)
}
}
}
SimpleTread().start()
간단한 스레드를 작성해보았다. 실행하였을 때 1..2..3.. 쭉쭉 가다가 앱이 종료되면 다음과 같이 실행이 끊긴다.
그럼 이제 비교를 위해 WorkManager를 생성해보자.
implementation("androidx.work:work-runtime-ktx:2.7.1")
class WorkManagerA(context : Context, workerParameters: WorkerParameters) :
Worker(context, workerParameters){
override fun doWork(): Result {
for(i in 1..10){
sleep(1000)
Log.d("WorkManagerA", "$i")
}
return Result.success()
}
}
val workManagerA = OneTimeWorkRequestBuilder<WorkManagerA>().build()
WorkManager.getInstance(this).enqueue(workManagerA)
위와 같이 gradle파일에 추가를 해준 뒤
WorkManager클래스를 생성해주어 스레드와 똑같이 1..10까지 반복문을 작성한다.
그리고 MainAcitivty에서 위와 같이 작성해주어 workManager를 실행한다.
이제 중간에 앱을 중지하고 로그를 확인해보자.
위와 같이 두 개의 로그 모두 끊긴 것을 확인할 수 있다.
하지만 일정 시간 뒤에 다시 workManager의 로그만 찍히는 것 또한 확인할 수 있었다.
이렇게 앱이 종료되거나 다시 시작되었을 때 이 작업이 유지되며 실행되고 있다.
이제 앞에서 언급했던 지속적인 작업 이라는 키워드를 이해할 수 있을 것이다.
지속적인 작업에 꼭 필요한 기능이고 다음 글에서 workManager를 다른 것과 합쳐 어떻게 사용할 수 있는지 포스팅할 예정이다!
'Android > JETPACK' 카테고리의 다른 글
[JETPACK개론] WorkManager(3) + Chaining, Coroutine (0) | 2022.09.09 |
---|---|
[JETPACK개론] WorkManager(2) + Sending, Receiver Data (0) | 2022.09.08 |
[JETPACK개론] ROOM(3) (0) | 2022.09.05 |
[JETPACK개론] ROOM(2) (0) | 2022.09.03 |
[JETPACK개론] ROOM(1) (0) | 2022.09.02 |