Background 작업이 필요할 때!
UI 스레드로 실행이 오래걸리는 작업을 진행한다면 UI 블로킹으로 좋지 못한 UX 를 제공할 것이다.
따라서 bitmap 을 디코딩한다든지, 네트워크 요청이나 저장소에 접근 그리고 머신러닝 모델을 동작시키는 등의 무거운 작업을 할 때는 따로 백그라운드 작업이 필요할 것이다.
Background 작업의 3 가지 카테고리와 각 2 가지 타입
백그라운드 작업은 기본적으로 아래 세 가지 카테고리로 분류됨
- Immediate
당장 실행해야하고 금방 끝나는 작업 - Long-running
끝나는 데 시간이 걸리는 작업, 약 10분 이상
Impersistent 권장 x Persistent 권장 o (따라서 WorkManager 사용 권장)
ex 청크할 수 없는 큰 파일 다운로드하는 작업 - Deferrable
당장 실행할 필요 없는 작업이지만 앱을 종료하거나 기기를 재시작해도 스케줄 되어야하는 작업
ex 백엔드와 정기적으로 데이터를 sync 해야하는 작업
세 가지 각각이 지속적이거나 지속적이지 않을 수 있다.
- Persistent work ( 앱을 재실행하고 디바이스를 재부팅 해도 스케줄되어야하는 작업 )
- 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 를 간단히 알아보자
(링크 추가 예정)
'Android > 이론 학습' 카테고리의 다른 글
[Android/Kotlin] Intent 에 커스텀 객체 전달하기? 직렬화, 역직렬화 Serializable 과 Parcelable, @Parcelize (0) | 2022.02.20 |
---|---|
[Android] Hilt 의 다양한 어노테이션을 알아보자 (0) | 2022.02.19 |
[Android] 안드로이드의 DI (Dependency Injection) (0) | 2022.02.16 |
[Android] Activity 의 Life cycle 과 App Life cycle 을 연관지어 생각해보기 (0) | 2022.02.10 |
[Android] 안드로이드의 Processes 와 App Life-cycle (0) | 2022.02.07 |