2014-11-10 3 views
1

나는 발견하고 다양한 Service에 바인딩 할 때 getApplicationContext()를 사용해야 언급 여기에 SO에 대한 게시물을 읽고 - 대신 (A Fragment에서) (AN Activity)에 this 또는 getActivity()을. 서비스 (컨텍스트 또는 ServiceConnection)의 "클라이언트"는 누구입니까?

그러나이 나를 위해 다음과 같은 질문을 제기 : 문서를 반복적으로 Service의 "클라이언트", 예컨대 : "서비스가 모든 클라이언트에서 언 바운드 때, 안드로이드 시스템이 파괴"( http://developer.android.com/guide/components/bound-services.html)에 대해 이야기합니다.

  • bindService()
  • 또는 bindService()

에 공급 된 ServiceConnection를 호출하는 데 사용 된 Context이의 내가 두 Fragments이 있다고 가정하자 :이 상황에서 클라이언트가 무엇을 의미하는지

응용 프로그램 컨텍스트 (Application Context)를 사용하여 각각 을 사용하여 동일한 Service에 바인딩합니다.

서비스가 언제 파기됩니까?

내 두 번째 해석이 참이라면 모든 연결이 닫히면 (즉, 각 조각이 getActivity().getApplicationContext().unbindService(mConnection)이라고 할 때) Service이 파괴됩니다. 첫 번째 항목이 사실이라면 첫 번째 단편이 호출을 완료하자마자 닫아야합니다. "응용 프로그램 컨텍스트의 바인딩을 해제합니다"...

그렇다면 어떤 해석이 사실입니까? (두 번째 희망 이니 ...)

답변

1

getApplicationContext()을 사용하면 ServiceConnection이 생존합니다. 활동 오리엔테이션이 바뀝니다 (활동은 파괴되고 재창조됩니다). documentation에 따르면 활동이 중지 될 때 서비스가 연결이 끊어 질 수 있습니다 (파괴되지 않음).

'클라이언트'는 활성화 된 사람이 ServiceConnection 인 사람입니다. 아무도 서비스에 연결되어 있지 않으면 서비스가 더 이상 필요 없으므로 파기됩니다 (startService(...)으로 시작하지 않는 한). ServiceConnection은 컨텍스트가 아닌 계수됩니다.

해당 조각이 삭제 된 경우 연결이 자동으로 종료되는지 여부는 테스트하지 않았습니다. 애플리케이션 컨텍스트가 살아남 았기 때문에 제 생각에는 NO입니다. onDestroy에서 명시 적으로 바인드 해제해야합니다.