본문 바로가기

안드로이드/Android Studio

[ Android ] Foreground Service 와 BackGround Service

안드로이드 개발을 하다보면 백그라운드 실행이 필요한 작업을 수행해야될 때가 있는데요.

이럴 때 메인 스레드가 아닌 서브 스레드를 생성하여 사용하게 됩니다.

 

하지만 서브 스레드로만 작업을 수행하게되면 액티비티나 프래그먼트에서 onDestroy()가 호출 되거나, 서브 스레드의 작업이 끝났을 때 해당 Activity가 존재하지 않는 상태라면 UI 갱신이 불가합니다.

 

이러한 경우에 필요한 안드로이드의 컴포넌트가 바로 Service입니다.

 

서비스는 안드로이드 컴포넌트 중 하나로, 기본적으로 메인 스레드에서 실행되며 UI가 없습니다.

이 서비스에서의 백그라운드 스레드는 개발자가 직접 관리를 해야하는데 서비스에는 백그라운드 서비스와 포어그라운드 서비스, 바인드 서비스가 있는데 이번 글에서는 백그라운드 서비스와 포그라운드 서비스에 대해서만 얘기해보겠습니다.

 

백그라운드 서비스와 포그라운드 서비스의 가장 큰 차이점은, 사용자가 서비스의 존재에 대해 인지할 수 있는지 없는지에 대한 차이라고 볼 수 있습니다.

 

백그라운드 서비스

백그라운드 서비스는 사용자에게 직접적으로 보이지 않는 작업을 수행합니다.

SNS앱을 예로 들겠습니다.

갬성있는 카페에서 인생샷이 나와서 게시물을 공유하려고 합니다. 근데 공유뿐만 아니라 다른 사람의 게시물을 보려고해요. 우리는 공유 버튼을 누른 후 다른 화면으로 넘어가 다른 사람의 게시물들을 보죠.

이 때, 자신의 게시물을 공유하고 다른 화면으로 넘어가거나 앱을 종료해도 게시물 업로드가 종료되지 않고

백그라운드 서비스가 시작되어 업로드는 진행중이나 사용자 입장에서는 이런 사실에 대해 눈으로 직접 보진 못하죠.

 

포그라운드 서비스

포그라운드 서비스는 사용자에게 잘 보이는 몇몇 작업을 수행합니다.

예를들어 멜론이나 지니같은 앱이라면 노래를 재생할 때 포그라운드 서비스를 사용합니다.( 구글플레이 스토어 앱 다운로드 등등)

이럴 때 우리는 상태바의 알림창을 통해 노래의 일시정지, 재생 등의 동작을 수행할 수 있고 앱 다운로드때라면 얼마나 진행중인지를 알 수 있죠.

이처럼 포그라운드 서비스는 알림을 꼭 표시해야 합니다. (포그라운드 서비스가 실행되고 5초 안에 알림을 표시 안 한다면 ANR이 발생합니다.) 포그라운드 서비스는 사용자가 앱과 상호작용하지 않을 때도 계속 실행돼요.

 

이러한 포그라운드 서비스의 특징에는 앱이 메모리 부족 시 시스템에 의해 강제로 종료되지 않는다는 점도 있습니다.

 

반응형