스터디

[Manifest-Android] 9. 서비스

참깨빵위에참깨빵_ 2025. 6. 21. 15:36
728x90
반응형

앱이 유저의 상호작용과 독립적으로 장기간 실행되는 작업을 수행할 수 있게 하는 백그라운드 컴포넌트. UI가 없고 앱이 포그라운드에 있어도 계속 실행될 수 있다.

일반적으로 파일 다운로드, 음악 재생 등 백그라운드 작업에 쓰인다.

 

Started Service

 

서비스는 Application 컴포넌트가 startService()를 호출하면 시작된다. stopSelf()로 스스로 중지하거나 stopService()로 명시적으로 중지될 때까지 백그라운드에서 무기한 실행된다.

 

Bound Service

 

bindService()를 호출해서 바인딩한다. 바인딩된 클라이언트가 있는 한 서비스는 활성 상태로 유지되고 모든 클라이언트의 연결이 끊어지면 자동으로 중지된다.

 

포그라운드 서비스

 

지속적 알림을 표시하는 동안 활성 상태로 유지되는 특수한 서비스. 음악 재생, 네비게이션 또는 위치 추적처럼 지속적인 유저 인식이 필요한 작업에 쓰인다.

 

즉각적인 실행이 필요한 백그라운드 작업엔 서비스 대신 제트팩 WorkManager를 사용하고 작업이 끝나면 서비스를 중지해서 불필요한 리소스 낭비를 방지하는 게 좋다.

 

포그라운드 서비스는 어떻게 처리하는가?

 

포그라운드 서비스는 유저에게 보이는 작업을 수행하는 특수한 서비스다. 알림 표시줄에 지속적인 알림을 띄워서 유저가 작동 중임을 알 수 있게 한다. 주로 미디어 재생, 위치 추적, 파일 업로드 등 우선순위가 높은 작업에 쓰인다.

일반 서비스와의 주요 차이점은 포그라운드 서비스는 startForeground()를 호출하고 즉시 알림을 표시해야 한다는 것이다.

 

서비스 생명주기

 

서비스는 2개 모드로 작동할 수 있다.

 

  • started service : startService()를 써서 시작되고 stopSelf() 또는 stopService()를 써서 명시적으로 중지할 때까지 계속 실행된다.
  • bound service : bindService()를 써서 하나 이상의 컴포넌트에 바인딩되고, 바인딩돼 있는 동안 존재한다

 

생명주기는 onCreate, onStartCommend, onDestroy로 관리된다.

 

  • onCreate : 서비스 처음 생성 시 호출. 서비스에 필요한 리소스 초기화에 쓰인다
  • onStartCommand : startService()로 서비스 시작 시 트리거된다. 실제 작업 실행을 처리하고 리턴값(START_STICKY, START_NOT_STICKY)를 써서 서비스 종료 시 재시작 동작을 결정한다
  • onDestroy : stopSelf() 또는 stopService()를 써서 서비스 중지 시에 호출된다. 리소스 해제, 쓰레드 중지 등 정리 작업에 쓰인다

 

Bound Service의 생명주기

 

  • onCreate : started service처럼 서비스 생성 시 리소스 초기화
  • onBind : 컴포넌트가 bindService()를 써서 서비스에 바인딩 시 호출. 서비스에 인터페이스(IBinder)를 제공한다
  • onUnBind : 마지막 클라이언트가 서비스에서 바인딩 해제 시 호출. 바인딩된 클라이언트와 관련된 리소스를 정리한다
  • onDestroy : 서비스 종료 시 호출. 리소스 종료 처리와 진행 중인 작업을 중지한다
반응형