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는 클라이언트 상호작용을 위한 인터페이스를 제공하고 언바인딩되면 종료됩니다. 이러한 생명주기를 적절히 관리하면 최적의 리소스 활용을 보장하고 메모리 누수를 방지할 수 있습니다.