0

서비스는 모두입니다. 유형 (정의 : here)입니다. 무한대로 실행되기 시작하면 별개의 응용 프로그램이 바인드됩니다.이 응용 프로그램이 소멸되면 onDestroy 메서드에서 unbindService이 호출됩니다.서비스가 활동이 종료되었음을 어떻게 감지 할 수 있습니까?

서비스가이 응용 프로그램이 완료되었음을 감지해야합니다. 모든 클라이언트가 서비스에 의해 게시 된 특정 인터페이스에서 연결을 끊었을 때 이라는 onUnbind 메서드를 읽었습니다. 그러나 모든 클라이언트의 연결이 끊어지면 연결을 끊을 필요가 없습니다. 가능한가?

폐쇄 중 (onDestroy 메서드 내에서) 응용 프로그램이 서비스에 바인딩 된 사실을 활용하여 메시지를 보낼 수 있다고 생각했습니다. 나중에 다음과 같이 unbindService 메서드를 호출해야합니다. 이런 식으로

// method of the application 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    service.closed(); // service is defined by IService.aidl 
    unbindService(...); 
} 

서비스 (service.closed() 방법)에 마지막 메시지를 보내 다음 서비스 바인딩을 해제 할 응용 프로그램. 올바르게 작동할까요? 메시지가 대상에 도착했을 때 service.closed() 메서드가 반환합니까? 또는 unbindService 메서드를 다음 번 호출로 인해 메시지가 배달되지 않을 수 있습니까?

답변

1

가능합니까?

액티비티를 바인딩 해제하기 전에 Binder에서 메서드를 호출하여 연결이 끊어 졌음을 나타냅니다.

제대로 작동할까요?

해야합니다. AIDL 호출은 동기이므로 unbindService()Binderclosed()과 함께 호출 될 때까지 발생하지 않습니다.

+0

좋아요! 제대로 작동합니다! – enzom83

관련 문제