Details: Service의 생명주기
이전에 학습했듯이, 서비스는 두 가지 모드로 작동할 수 있습니다:
Started Service:
startService()
를 사용하여 시작되며,stopSelf()
또는stopService()
를 사용하여 명시적으로 중지될 때까지 계속 실행됩니다.Bound Service:
bindService()
를 사용하여 하나 이상의 컴포넌트에 연결되며, 연결되어 있는 동안 존재합니다. 수명 주기는onCreate()
,onStartCommand()
,onBind()
,onDestroy()
와 같은 메서드를 통해 관리됩니다.

Started Service의 생명주기 메서드
onCreate()
: 이 메서드는Service
가 처음 생성될 때 호출됩니다.Service
에 필요한 리소스를 초기화하는 데 사용됩니다.onStartCommand()
:startService()
를 사용하여Service
가 시작될 때 트리거됩니다. 이 메서드는 실제 작업 실행을 처리하고, 반환 값(예:START_STICKY
,START_NOT_STICKY
)을 사용하여Service
가 강제 종료될 경우의 재시작 동작을 결정합니다.onDestroy()
:stopSelf()
또는stopService()
를 사용하여Service
가 중지될 때 호출됩니다. 리소스 해제 또는 스레드 중지와 같은 정리 작업에 사용됩니다.
Bound Service의 생명주기 메서드
onCreate()
: Started Service와 유사하게,Service
가 생성될 때 리소스를 초기화합니다.onBind()
: 컴포넌트가bindService()
를 사용하여Service
에 바인딩될 때 호출됩니다. 이 메서드는Service
에IBinder
인터페이스를 제공합니다.onUnbind()
: 마지막 클라이언트가Service
에서 언바인딩될 때 호출됩니다. 이 곳에서 바인딩된 클라이언트에 특화된 리소스를 정리합니다.onDestroy()
:Service
가 종료될 때 호출됩니다. 리소스 정리 및 진행 중인 작업 중단을 처리합니다.
Started Service와 Bound Service 생명주기의 주요 차이점
Started Service
: 어떤 컴포넌트와도 독립적이며, 명시적으로 중지될 때까지 실행됩니다.Bound Service
: 최소한 하나의 클라이언트에 바인딩되어 있는 동안에만 존재합니다.
요약
Service
생명주기를 이해하는 것은 효율적이고 신뢰할 수 있는 백그라운드 작업을 구현하는 데 매우 중요합니다. Started Service
는 독립적인 작업을 수행하며 중지될 때까지 유지되는 반면, Bound Service
는 클라이언트 상호작용을 위한 인터페이스를 제공하고 언바인딩되면 종료됩니다. 이러한 생명주기를 적절히 관리하면 최적의 리소스 활용을 보장하고 메모리 누수를 방지할 수 있습니다.