[Android] Foreground와 Background Service

KSK·2025년 3월 17일

개요

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()

  • 시스템에서 서비스를 처음 생성할때 호출

  • onStartCommand() 또는 onBind()를 호출하기 전에 호출됨

  • 서비스가 이미 실행중이라면 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

profile
그런게어딨어그냥하는거지

0개의 댓글