Android/이론 학습

[Android] 안드로이드의 Background 작업

노소래 2022. 2. 12. 05:03

 

 

 

Background 작업이 필요할 때!

UI 스레드로 실행이 오래걸리는 작업을 진행한다면 UI 블로킹으로 좋지 못한 UX 를 제공할 것이다.

따라서 bitmap 을 디코딩한다든지, 네트워크 요청이나 저장소에 접근 그리고 머신러닝 모델을 동작시키는 등의 무거운 작업을 할 때는 따로 백그라운드 작업이 필요할 것이다.

 

Background 작업의 3 가지 카테고리와 각 2 가지 타입 

백그라운드 작업은 기본적으로 아래 세 가지 카테고리로 분류됨

  1.  Immediate
    당장 실행해야하고 금방 끝나는 작업 
  2. Long-running
    끝나는 데 시간이 걸리는 작업, 약 10분 이상
    Impersistent 권장 x Persistent 권장 o (따라서 WorkManager 사용 권장) 
    ex 청크할 수 없는 큰 파일 다운로드하는 작업
  3. Deferrable
    당장 실행할 필요 없는 작업이지만 앱을 종료하거나 기기를 재시작해도 스케줄 되어야하는 작업
    ex 백엔드와 정기적으로 데이터를 sync 해야하는 작업

세 가지 각각이 지속적이거나 지속적이지 않을 수 있다.

 

  1. Persistent work ( 앱을 재실행하고 디바이스를 재부팅 해도 스케줄되어야하는 작업 )
  2. Impersistent work ( 프로세스가 끝나면 더이상 스케줄 될 필요 없는 작업 )

권장사항 

  • 모든 persistent 작업은 WorkManager 로 사용할 것 권장
  • immediate-persistent 작업은 Kotlin coroutine (or RxJava or Guava or Excutors)을 사용할 것 권장 (ex data source 로 부터 data 가져오기)
  • Long running-impersistent 작업과, Deferrabl-impersistent 작업은 권장하지 않음 (이에 대해 이유를 간단히 생각해보자면 오래 걸리는 작업과 실행을 지연하는 작업을 지속하지 않는 타입의 백그라운드로 쓸 이유가 없다.) -> 대신 WorkManager 로 persistent 작업으로 완료한다. 

 

다음글에서는 Coroutine 과 RxJava 를 간단히 알아보자

(링크 추가 예정)