2011-08-29 1 views
0

나는 며칠 동안 저를 곤혹스럽게하는 이상한 문제에 직면했습니다. 첫 번째 배경 정보 :서비스 콜백이 내 활동의 오래된 "고스트"인스턴스를 참조합니다.

본인은 제 3 자 서비스 (라이브러리로 제공됨)에 동의하는 행위를합니다. 이 서비스는 클라이언트가 작업 수행을 요청할 때마다 비동기 콜백을 클라이언트 (내 액티비티)로 보냅니다. 서비스는 startService() 및 stopService() 호출로 시작되지 않습니다. 나는 servcie가 필요할 때 바인드를 수행하고 완료 될 때 바인드를 해제합니다. 한 번에 서비스에 바인딩 된 활동이 두 개 이상 있습니다.

내 문제 :

는 사용자가 내 활동을 시작한다 (예 : A를 호출 할 수 있습니다). onCreate()에서 서비스에 바인딩하고 요청을 보냅니다. 서비스에서 콜백을 받고 일부 로컬 변수를 설정합니다. 일단 내가해야 할 것을 통과하면, 나는 finish()를 호출한다. onDestroy()가 호출되면 바인딩 해제 서비스를 수행합니다. 이 시점에서 내 가정은 서비스 인스턴스와 내 활동 모두 더 이상 참조 할 수 없어야한다는 것입니다.

이제 A가 끝나면 사용자가 다시 액티비티를 시작합니다 (이 인스턴스 B를 호출 할 수 있음). 다시 onCreate에 바인딩하고 요청을 보냅니다. 그러나 콜백을 받으면 서비스가 이전 "유령"인스턴스 A에 콜백을 발행했음을 알았습니다.이 새로운 인스턴스 B를 사용하는 대신 모든 인스턴스 A의 로컬 변수를 사용하고 있습니다. "이 "바인딩 전에 참조하고 콜백을받은 후 다시 참조가 인스턴스 B에서 인스턴스 A로 변경되었음을 알 수있었습니다. 내 활동의 실행은 계속 진행되지만, A의 실행이 끝나면 내 로컬 변수가 이전 상태로 잘못 설정되었으므로 B의 실행이 실패합니다.

그래서 몇 가지 질문 :

  1. 어떻게이 여전히 들의 OnDestroy (후에 참조되는)와 바인딩 해제가 호출 될 가능성이있다?
  2. 이 문제는 제 3 자의 서비스와 관련 될 수 있으며 구현되지 않았습니까? (다시,이 서비스에 소스 코드가 없습니다. 그냥 사용하고 있습니다.)

여러분 모두 통찰력을 주셔서 감사합니다.

-Jason

답변

0

제 3 자 서비스였습니다.

관련 문제