관리 메뉴

오늘도 더 나은 코드를 작성하였습니까?

Android Service의 기본 본문

카테고리 없음

Android Service의 기본

hik14 2025. 12. 7. 20:08

Android Service 정의

Service는 사용자 인터페이스(UI)를 제공하지 않으면서 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 Android 애플리케이션 구성 요소입니다.

  • UI 없음: Activity와 달리 화면에 표시되지 않습니다.
  • 백그라운드 실행: 사용자가 다른 앱으로 전환하거나 앱을 닫은 후에도 계속 실행될 수 있습니다.
  • 용도: 네트워크 트랜잭션 처리, 음악 재생, 파일 I/O, 콘텐츠 제공자와의 상호 작용 등과 같이 지속적으로 또는 특정 시점까지 실행되어야 하는 작업을 처리하는 데 사용됩니다.

https://developer.android.com/develop/background-work/services?hl=ko

 

Service의 주요 유형

Android 서비스는 크게 세 가지 유형으로 나눌 수 있으며, 이는 Service가 실행되는 방식과 시스템에서의 우선순위를 결정합니다.

1. 포그라운드 서비스 (Foreground Service)

  • 정의: 사용자에게 직접적으로 인지되는 작업을 수행하는 서비스입니다.
  • 특징: 반드시 **상태 표시줄(Status Bar)에 지속적인 알림(Notification)**을 표시해야 합니다.
  • 우선순위: 시스템 메모리가 부족하더라도 강제 종료될 가능성이 가장 낮습니다.
  • 예시: 음악 재생 앱에서 현재 트랙 정보를 표시하는 알림과 함께 음악을 재생하는 경우.

2. 백그라운드 서비스 (Background Service) 현재 거의 사용되지 않음. WorkManager에 대체됨. 

  • 정의: 사용자에게 직접 보이지 않는 작업을 수행하는 서비스입니다.
  • 특징: 사용자에게 알림을 표시할 필요는 없습니다.
  • 우선순위: 시스템이 리소스를 회수해야 할 경우 가장 먼저 강제 종료될 수 있습니다. (Android 버전이 올라가면서 백그라운드 실행에 제약이 많아졌습니다.)
  • 예시: 주기적인 데이터 압축이나 로그 기록 등의 작업.

참고: 앱이 API 수준 26 이상을 타겟팅하는 경우 앱 자체가 포그라운드에 있지 않을 때 시스템은 백그라운드 서비스 실행에 제한을 적용합니다. 예를 들어 대부분의 경우 백그라운드에서 위치 정보에 액세스해서는 안 됩니다. 대신 WorkManager를 사용하여 작업을 예약하세요.

3. 바인드 서비스 (Bound Service)

  • 정의: 애플리케이션의 다른 구성 요소(예: Activity)가 bindService()를 호출하여 바인딩할 수 있도록 하는 서비스입니다.
  • 특징: 클라이언트-서버 인터페이스를 제공하여 구성 요소들이 서비스와 상호 작용하고 요청을 보내고 응답을 받을 수 있습니다.
  • 수명: 서비스에 바인딩된 구성 요소가 모두 바인딩을 해제하면 서비스가 소멸됩니다.
  • 예시: Activity가 Service에 연결하여 실시간으로 데이터를 요청하고 받는 경우(IPC: 프로세스 간 통신에 사용 가능).

중요 참고 사항: 스레드와의 관계

Service는 기본적으로 **앱의 메인 스레드(Main Thread)**에서 실행됩니다. 따라서 Service 내에서 네트워크 통신이나 복잡한 계산과 같은 오래 걸리는(intensive) 작업을 수행할 경우 메인 스레드를 차단하여 앱의 ANR (Application Not Responding) 오류를 유발할 수 있습니다.

 

따라서 Service 내에서 장시간 작업을 수행하려면, Service 내부에서 새로운 스레드를 생성하거나 Kotlin 코루틴 등을 사용하여 작업을 백그라운드 스레드로 분리하는 것이 중요합니다.