백그라운드 테스크
Published by Woong Geun Jang,
레퍼런스
- Guide to background processing | Android Developers
안드로이드 개발자 가이드 요약
Guide to background processing | Android Developers
백그라운드 프로세싱 가이드
모든 안드로이드 앱은 UI를 담당하는 메인쓰레드가 있고,
이 UI쓰레드는 뷰의 사이즈를 측정하고 화면에 그리거나, 아니면 유저 인터랙션에 반응하거나 라이프사이클 이벤트를 받는 역할을 한다.
당연히 이 쓰레드에서 너무 많은 연산이 일어나면, 앱이 느려지고 사용자들에게 부정적 경험을 준다.
따라서 비트맵 디코딩, 디스크 접근 등 연산량이 많은 태스크의 경우 백그라운드 쓰레드에서 처리해야 한다. 일반적으로 0.1초보다 오래 걸리는 연산은 백그라운드 테스크에서 처리해야 한다고 한다.
백그라운드 프로세싱을 하기 전에 3가지 고려사항이 있다.
- 해당 작업이 바로 수행되어야 하는 것인지? 아니면 연기될 수 있는지?예로 들어, 유저가 버튼 클릭했을 때 네트워크에서 데이터를 가져와서 보여주는 작업은 바로 수행되어야 하는 반면, 로그를 서버에 올리는 작업은 여유가 있을 때 천천히 수행되면 된다.
- 해당 작업이 시작하면, OS가 앱 프로세스를 살려두어야 하는지?예로 들어, 비트맵을 디코딩하고 디스플레이 하는 작업은 앱이 살아있을 경우만 의미가 있는 반면, 뮤직 플레이어는 앱이 백그라운드에 있을 때도 음악 재생을 계속되어야 한다.
- 해당 작업이 system 이벤트에 따라 시작되어야 하는가?예로 들어, 에어플레인 모드가 해제되기 전까지 기다렸다가 서버와 통신하는 경우가 있을 수 있다. 이 상황에서 만약 앱 프로세스가 죽어있으면, 디바이스가 온라인이 되면 앱 프로세스를 살려서 일을 이어서 수행하고 싶을 수 있다.
아래 표는 고려사항에 따른 API 사용 테이블이다.

ThreadPools
Foreground Services
WorkManager
제약사항
배터리 효율과 앱의 부정적인 활동을 제어하기 위해서 안드로이드는 foreground service notification이나 앱이 유저에게 보이지 않을 경우 백그라운드 작업을 제한한다고 한다.