개요
Foreground와 Background의 비교
안드로이드에서의 Foreground/Background Service
Service
- 안드로이드 4대 컴포넌트 중 하나, 사용자에게 따로 인터페이스를 제공하지 않고 오랫동안 실행되어야 하는 작업을 수행함
- 액티비티 처럼 유저와 상호작용하는 컴포넌트가 아니라, 백그라운드에서 동작하는 컴포넌트 → 사용자에게 인터페이스를 제공하지 않는다.
- 메인 스레드에서 실행됨
- 자체적인 Lifecycle을 가짐
Foreground Service
- 애플리케이션이나 그 요소가 사용자 인터페이스 상에 활성화되어
사용자와 상호작용이 가능한 상태
- 시스템 리소스를 최대한으로 사용 가능
- 안드로이드 Service 중 사용자의 눈에 보이는 작업을 비동기적으로 실행 가능한 서비스
- 상태바 Notification 상에 표시해야함
예시
- 포그라운드 서비스에서 음악을 재생하는 음악 플레이어 앱
알림은 현재 재생 중인 노래를 보여줄 수 있음
- 사용자의 달리기를 기록하는 피트니스 앱
알림으로 현재 피트니스 세션 동안 사용자가 이동한 거리를 보여줄 수 있음
Background Service
- 애플리케이션이 활성화되어 있으나 사용자의 눈에 보이지 않고 직접 상호작용이 불가능한 상태
- 다른 애플리케이션이 포어그라운드에서 실행되거나 홈 화면으로 전환하면 기존 애플리케이션은 백그라운드가 된다
- 시스템 리소스 사용이 제한 혹은 최소한으로 사용
- OS에 의해 종료될 가능성이 있는 서비스
예시
- 이미지 로드, 저장소 액세스, 네트워크 통신 등
Bind Service
- IBinder라는 인터페이스로 서버-클라이언트 관계처럼 서비스와 상호작용
- 여러 컴포넌트에서 같은 서비스에 바인딩해서 사용 가능 → 프로세스 간 IPC
- 바인딩된(이 서비스를 호출한) 액티비티들이 모두 종료되면 서비스 소멸
서비스 Lifecycle

1. onStartCommand()
- 다른 컴포넌트에서 startService()로 서비스가 호출되면 이게 호출되며 서비스 시작
-
onCreate()는 처음 서비스가 만들어질때 호출되는 것이고, 이것(onStartCommand)은 서비스가 실행될때마다 처음 호출됨
→ 중요 작업은 onStartCommand() 에 작성해야한다.
-
이 메소드를 구현한 후 서비스를 중단하기 위해 stopSelf() 나 stopService() 메소드를 호출해야 함
2. onCreate()
3. onDestroy()
-
시스템에서 더 이상 서비스 사용 X, 서비스 제거할때 호출
-
서비스가 실행한 스레드, 리스너, 리시버 등 리소스 제거하는 동작 구현되어야함
참고
https://developer.android.com/develop/background-work/services/fgs
https://developer.android.com/develop/background-work/services?hl=ko
https://keykat7.blogspot.com/2021/01/android-notification-foreground-service.html