2015-01-20 5 views
0

부울 검사를 통해 수행되는 #bindService를 호출 한 경우 #unbindService (동일한 컨텍스트에서) 만 호출하려는 모든 코드 예제에서 나타납니다.bindService/unbindService 호출을 완벽하게 쌍으로 연결해야합니까?

#bindService 호출에는 비슷한 검사가 없습니다. 즉, 먼저 "이중 바인딩"을 피하기 위해 먼저 바인딩했는지 확인하지 않습니다.

그래서 내 질문 -

  1. 내가 서비스를 여러 번 바인드하지만 한 번만 바인딩 해제, 또는 내가 한 번 바인딩하고 여러 번 바인딩을 해제 할 경우에만 나쁜 경우 "나쁜 일이 일어날 것"? 그런 비대칭 성이 나에게는 이상한 것처럼 보이지만 그 답을 아는 사람이 있는지 알고 싶었습니다. 나는 그것을 스스로 알아 내려고 노력하고 있지만 더 많은 경험을 가진 devs의 "공식적인"대답을 선호한다.
  2. "바인딩"및 "바인딩되지 않은"작업으로 간주되는 것은 무엇입니까? 사실 #bind (또는 #unbind) API를 호출하고 해당 호출을 쌍으로 연결해야합니다. 그렇지 않으면 바인딩 된/페어링되어야하는 # onServiceConnected/Disconnected 콜백에 의해 표시되는 언 바운드 상태? 구글 자신의 예제가 사실을 나타내는 것처럼 보입니다. 누구든지 확인할 수 있습니까? 이전 항목이 사실이라면 #bindService가 false를 반환하면 안드로이드는 서비스를 해결할 수 없으므로 연결을 시도하지 않습니다.이 경우 #unbindService를 호출해도 안전합니까?

고맙습니다.

+0

같은 서비스 연결로 두 번 (또는 그 이상) 바인딩 할 수있는 방법은 무엇입니까? – pskink

+0

예 문서를 보았는데 제 질문에 아주 답하고 있지 않습니다. "이해가되지 않더라도 같은 연결에 두 번 바인딩 할 수있는 것처럼 보입니다. 그게 내가이 질문을하는 이유의 일부입니다. 이러한 방법을 중심으로 공식 계약을 찾고 있었기 때문에 견본 사용에 대한 일반적인 지침뿐만 아니라 강력한 응용 프로그램을 만들 수 있습니다. 언제나 Google의 의사는 매우 피상적이며 적절한 계약 사양이 아닙니다. 내 앱에서 완벽한 연결/연결 해제 쌍을 얻지 못할 수도있는 상황이 있으며이를 처리하는 방법을 더 잘 이해하고 싶습니다. – Creos

+0

동일한 ServiceConnection을 사용하여 bindService를 호출하더라도 여러 번 onServiceConnected가 한 번만 호출됩니다. 두 번째 호출 이후 호출이 no-ops이고 unbindService가 작업을 수행함을 나타냅니다. – pskink

답변

0

안드로이드가 동일한 서비스에 여러 번 바인딩하는 것을 허용하지 않을지는 모르겠지만 말이 안됩니다.

서비스에 바인딩하고 메신저 개체를 가져옵니다. 다음에 메신저가 null인지 확인합니다. 그렇지 않으면 다시 바인딩 할 필요가 없습니다. 활동이 끝나고 메신저가 null이 아니라면 바인드 해제됩니다.

세부 사항은 here입니다.

+0

네, 설명서를 보았습니다. 그리고 그것은 제 질문에 아주 답답하지 않습니다. "이해가되지 않더라도 같은 연결에 두 번 묶을 수있는 것 같습니다. 그게 내가이 질문을하는 이유의 일부입니다. 이러한 방법을 중심으로 공식 계약을 찾고 있었기 때문에 견본 사용에 대한 일반적인 지침뿐만 아니라 강력한 응용 프로그램을 만들 수 있습니다. 언제나 Google의 의사는 매우 피상적이며 적절한 계약 사양이 아닙니다. 내 앱에서 완벽한 연결/연결 해제 쌍을 얻지 못할 수도있는 상황이 있으며이를 처리하는 방법을 더 잘 이해하고 싶습니다. – Creos

+0

Google의 예도 잘못되었습니다.사실 변수 isBound를 true로 설정하면 안됩니다. #bindService의 반환 값을 살펴보고 시스템이 콜백 호출을 시도 할지도 모르기 때문에 전송 한 링크에 이미 버그가 있습니다. . 다시 말하지만, 그것이 내 질문의 목적이었고, 나는 그것이 완전히 이해되지 않고 해산되고 있다고 생각한다. downvote 또한 어리 석다. – Creos