바인딩된 서비스에 바인딩된 클라이언트 구성 요소(활동, Fragement, 다른 서비스)를 위해 bindService()를 호출해야 합니다. 바인딩은 Context.bindService() 메서드를 사용 하 여 수행 하는 반면 컨텍스트.unbindService()로 종료 됩니다. 클라이언트 구성 요소의 수명 주기가 종료되면 바인딩도 소멸됩니다. 바인딩된 서비스에서 Bind()를 해제하기 위해 호출은 단순히 unBindService(mServiceConnection)를 호출합니다. 그런 다음 시스템은 바운드 서비스 자체에서 unbind()를 호출합니다. 바인딩된 클라이언트가 더 이상 없는 경우 시스템은 시작된 상태가 아니면 바인딩된 서비스에서 destroy()를 호출합니다. 서비스가 시작되지 않은 상태가 아닌 경우 onDestroy()가 즉시 호출되고 바인딩된 서비스가 중단됩니다. 이제 서비스를 만드는 방법을 살펴보겠습니다(매우 기본적): 이 예제에서는 서비스가 클라이언트에 응답하는 방법을 보여주지 않습니다. 서비스가 응답하도록 하려면 클라이언트에서 메신저도 만들어야 합니다. 클라이언트가 onServiceConnected() 콜백을 수신하면 send() 메서드의 replyTo 매개 변수에 클라이언트의 Messenger를 포함하는 메시지를 서비스에 보냅니다. 다음은 onUnbind() 모양의 예입니다(바운드 서비스).

이제 맨 위에 두 가지 변수를 정의할 것입니다. 하나는 내 서비스 클래스의 개체 또는 인스턴스이므로 MyService 개체와 두 번째는 서비스 바인딩 여부를 확인하는 변수입니다. 그래서 이것은 우리의 부울 변수가 될 것입니다 그리고 우리는 isBound로 이름을 하려고합니다. 그리고 우리는 거짓으로 초기화하려고합니다. 한 걸음 뒤로 물러서서 서비스가 무엇을 의미하는지 에 대한 더 큰 그림을 살펴 보겠습니다. Java 스레드 또는 실행기와 같은 백그라운드 스레드에서 실행되는 코드는 Android 구성 요소의 수명 주기에 실제로 바인딩되지 않습니다. 활동에 대해 생각하면 사용자 상호 작용에 따라 별도의 시작 및 종료 지점이 있습니다. 그러나 이러한 시작 및 종료 지점이 스레드의 수명 주기와 반드시 연결되는 것은 아닙니다. 서비스가 모든 클라이언트에서 언바운드되면 Android 시스템은 서비스를 파괴합니다(onStartCommand()로 시작되지 않은 경우). 따라서 순전히 바인딩된 서비스인 경우 서비스의 수명 주기를 관리할 필요가 없습니다.

«언바인드 서비스»를 사용하여 실행 중인 서비스에서 바인딩해제할 수 있습니다. unbindService 메서드는 서비스 연결 개체만 걸립니다. 따라서 일반적으로 서비스는 활동의 수명 주기를 훨씬 넘어 백그라운드에서 실행 중인 작업을 유지하려는 경우 수행해야 하는 구성 요소입니다. 이제 다른 구성 요소가 원하는 만큼 서비스를 실행하려는 경우가 있습니다. 몇 초마다 난수를 생성하는 서비스를 사용하고 있으며 활동에 해당 숫자가 표시된다고 가정해 보겠습니다. 이 경우 활동의 수명 을 넘어 서비스를 실행하는 것은 의미가 없습니다 (난수를 사용하는 다른 사람이 없기 때문에). 포그라운드 서비스는 사용자가 이를 높은 우선 순위에 두는 것을 적극적으로 인식하는 서비스이므로 시스템이 메모리가 부족할 때 사망하지 않습니다. 서비스가 전경에서 중지되거나 제거되지 않는 한 해제할 수 없는 상태 표시줄에 대한 알림을 제공해야 합니다. 이러한 알림의 좋은 예는 상태 표시 줄의 알림에 재생/일시 중지, 다음, 이전 등과 같은 현재 노래 및 기타 작업 단추를 표시하는 음악 플레이어입니다. VOIP 통화 또는 파일 다운로드 앱은 포그라운드 서비스를 시작하고 유사한 알림을 표시할 수도 있습니다. 이렇게 하면 바인딩 클라이언트가 설정되거나 연결이 끊어지면 바인딩 클라이언트에 알림이 됩니다.

이렇게 하면 바인딩 연결을 관찰할 수 있습니다. bindService()에 전달된 마지막 인수(플래그)는 작업 옵션을 정의합니다.