Nuke Olaf - Log Store
[Android] 안드로이드 - background 서비스와 foreground 서비스의 차이점 본문
백그라운드 서비스와 포그라운드 서비스의 가장 큰 차이점은, 사용자가 서비스의 존재에 대해 인지할 수 있는지 없는지에 대한 차이라고 볼 수 있다.
1. 백그라운드 서비스 (Background Service)
예를 들어, 사용자가 커뮤니티앱에서 용량이 매우 큰 게시물을 작성하는 상황을 생각해보자. 사용자는 게시물을 작성하고, 작성완료 버튼을 누를것이다. 작성완료 버튼을 누르면, 사용자가 다른 액티비티로 이동중에도 게시물의 데이터의 업로드가 강제로 종료되지 않도록, 백그라운드 서비스가 시작되어 사용자가 작성한 게시물 정보를 서버에 업로드하는 서비스가 동작되도록 할 수 있다. 그러나 사용자는 이러한 사실에 대해 인지하지 못하고 커뮤니티 앱을 자유롭게 이용할 것이다. 백그라운드 서비스는 두가지 방식으로 시작할 수 있다. startService() 메서드를 호출하거나, bindService() 를 호출하는 것이다. 백그라운드, 포그라운드 상관없이 모든 서비스 클래스는 동시에 여러개의 요청을 처리해야하는 경우 Service 클래스를 상속받고, Intent로 받은 여러개의 요청을 작업큐에 담아놓고 하나하나 처리하고 싶은 경우 IntentService 클래스를 상속받는다.
2. 포그라운드 서비스 (Foreground Service)
사용자가 구글 플레이 앱스토어에서 앱을 다운받는 상황을 생각해보자. 사용자는 다운로드 버튼을 누르고, 앱이 전부 다운로드되기 전에 앱스토어 앱을 종료하고 다른 활동을 시작할 수 있다. 이때, 포그라운드 서비스가 시작되어 앱의 다운로드를 계속 진행하고, 사용자의 기기에 앱이 어느정도 다운로드되었는지를 알려주는 상태바알림이 제공된다. 포그라운드 서비스가 계속 진행중인 상태에는 계속해서 상태바알림이 제공되고, 사용자는 앱이 얼마만큼 다운로드 되었는지 인지할 수 있다.
포그라운드 서비스 ( Foregroudn Service) 는 현재 뭔가 하고 있다는 것을 사용자가 인지하고 있는 서비스이다. 그래서 메모리 부족시 시스템에 의한 종료대상에서 제외된다. 전면에 있는 서비스는 "진행중(Ongoing)"인 상태바 알림(notification)을 제공해야한다. 즉, foreground 서비스가 실행되는 중에는 무조건 상태바 알림(notification)이 제공되어야한다. 서비스가 정지되거나 전면에서 제외되지 않으면 상태바 알림 목록에서 제거되지 않는다는 뜻이다.
예를들어 서비스에서 음악을 재생중인 음악재생 앱은, 사용자가 음악 재생중이라는 것을 알고 있기 때문에 그 서비스를 전면에 두기 위해 상태바 알림을 제공한다. 그 상태바 알림은 아마 현재 재생중인 곡을 표시해 줄것이며, 눌렀을 때 음악재생 앱의 액티비티를 실행해 줄것이다.
즉, 서비스를 전면에 두기 위해서는 startForeground() 를 호출한다. 이 메서드에는 두 개의 인자를 넘겨야 한다. 하나는 알림을 식별하기 위한 유니크한 정수형 ID이며, 다른 하나는 Notification 객체이다. 서비스를 전면에서 제외시키기 위해서는 stopForeground() 를 호출한다. stopForeground() 메서드는 boolean 형의 인자를 받는다. 이것은 상태바에 있는 알림을 제거할것인지 여부를 가리킨다. 이 메서드는 서비스를 정지시키지는 않는다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 - Alarm 알람기능 (1) | 2019.12.04 |
---|---|
[Android] bindService 의 다양한 사용사례 (0) | 2019.12.04 |
[Android] 안드로이드 - 서비스를 사용하는 방법에 대한 정리 (0) | 2019.12.03 |
[Android] 안드로이드 - Service + Notification 통합 예제 (0) | 2019.12.02 |
[Android] 안드로이드 - 죽지 않는 서비스 (Immortal Service) (0) | 2019.12.02 |