2010-08-02 1 views
15

, 나는 startServicebindService 모두를 호출Android 서비스의 경우 unbindService와 stopService를 모두 호출해야합니까? 내 안드로이드 응용 프로그램에서

Intent intent = new Intent(this, MyService.class); 
ServiceConnection conn = new ServiceConnection() { ... } 

startService(intent) 
bindService(intent, conn, BIND_AUTO_CREATE); 

나중에 둘 다 unbindService and stopService`를 시도 :

unbindService(conn); 
stopService(intent); 

그러나, 나는 unbindService 호출에 예외를 얻을. 이 전화를 제거하면 앱이 stopService 전화를 통해 제대로 실행 된 것으로 보입니다.

내가 잘못 했나요? bindService 전화는 unbindService 전화와 연결되어야하고 startService 전화는 stopService 전화와 연결되어야한다고 생각했습니다. 이것은 여기에 해당하지 않는 것 같습니다.

+0

혹시 이것을 알아 냈습니까? 나는 똑같은 것을 만났고, 나 자신을 위해 unbindService (conn)를 주석 처리했다. 괜찮아 보이지만, 너와 똑같이 내 직감은 백그라운드에서 뭔가 싫어한다고 말한다. –

답변

24

stopService의 안드로이드 설명서는() 상태 : 중지 된 서비스가 여전히 BIND_AUTO_CREATE 세트와 결합 ServiceConnection 객체가있는 경우 이러한 바인딩이 모두 제거 될 때까지,이 파괴되지 않습니다

하는 것으로. 서비스 수명주기에 대한 자세한 내용은 서비스 설명서를 참조하십시오.

stopService() 다음에 unbindService()을 먼저 호출하면 작동합니다 (작동).

+1

아, 내 unbindService와 stopService 주문이 거꾸로 된 것처럼 들립니다. –

+0

감사합니다.이 도움이되었습니다. 나는 BIND_AUTO_CREATE를 사용했고 unbindService()는 ServiceConnection 누수 문제를 해결하는데 도움을 주었다. – lomza

+0

@Matt Huggins 그래서 처음에는 바인딩을 해제하고 그만하면됩니까? –

5

여기서 알 수 있듯이 달성하려는 서비스와 서비스 바인딩 방법에 따라 다릅니다. 서비스에 대한 참조를 오랫동안 사용하려면 startService보다 bindService를 사용하는 것이 좋습니다. bindService 메소드에서 BIND_AUTO_CREATE 플래그를 사용하면 startService를 호출 할 필요가 없습니다. 서비스가 필요할 때 시작되기 때문입니다.

서비스 바인딩 해제를 호출하면 서비스에 대한 서비스가 삭제됩니다. 당신은 명시 적으로 서비스를 중단해야하지만 당신은 할 수 없습니다. 그러나 unBind()를 호출하면 언제든지 서비스를 중지 할 수 있습니다.

+1

고마워,하지만 거기 있었고, BIND_AUTO_CREATE 플래그로 바인드하기 전에 수동으로 시작한 경우 바인딩을 해제하고 서비스를 중지해야하는지 명확하지 않습니다. –

8

나는이와 함께 히트 잡았다 :

당신이 bindService라는 같은 상황에 unbindService를 호출해야합니다. 내 경우, 나는 그것을 결합하기 위해 다음을 수행 하였다 반드시 바인드 모두를 만들기

unbindService(...); 

과 같은 맥락이 문제를 해결 사용되는 바인딩을 해제 :

Context c = getApplicationContext(); 
c.bindService(...); 

은 그럼 그냥, 그것을 바인딩을 해제 할 수 있습니다.

+1

감사합니다. – SteelBytes