2011-03-13 6 views
15

영어로는 좋지 않지만 좋은 방법으로 문제를 설명하려고합니다.
Android, 서비스 연결 해제 및 onService 연결 해제 문제

그래서, 문제는 : 나는 로컬 서비스
2) 나는 그것을 시작하고 다음에 바인딩이
1). 3) 해당 서비스를 닫을 때 문제가 나타납니다. onServiceDisconnected 메서드의 구현에서 ServiceConnection이 호출되지 않습니다. 설정에서 수동으로 닫거나 unbindService, stopService 또는 unbindService와 stopService를 함께 사용하는 경우 - onServiceDisconnected은 여전히 ​​호출되지 않습니다. 내가 뭘 잘못하고 있니?

짧은 코드는 다음과 같습니다 :

protected ServiceConnection mServerConn = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder binder) { 
     Log.d(LOG_TAG, "onServiceConnected"); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     Log.d(LOG_TAG, "onServiceDisconnected"); 
    } 
} 

public void start() { 
    // mContext is defined upper in code, I think it is not necessary to explain what is it 
    mContext.bindService(i, mServerConn, Context.BIND_AUTO_CREATE); 
    mContext.startService(i); 
} 

public void stop() { 
    mContext.stopService(new Intent(mContext, ServiceRemote.class)); 
    mContext.unbindService(mServerConn); 
} 

나는 극단적 인 상황이라고합니다 안드로이드 2.2

답변

23

onServiceDisconnected의 에뮬레이터에서이 코드를 테스트하고 있습니다 (사망/충돌).

모든 응용 프로그램 구성 요소는 일반적으로 동일한 프로세스에서 실행되므로 로컬 서비스에서는 거의 발생하지 않을 것입니다. 즉, 서비스를 의도적으로 바인딩 해제 또는 파괴하지 않는 한, 연결을 유지하거나 구성 요소를 사용하여 그것.

+1

감사합니다. 나는 그것이 버그 또는 그 밖의 다른 것이라고 생각하지 않았습니다. 그래서 onServiceDisconnected()의 needle 데이터 (코드)를 stop()에 복사했습니다. 이제 내가 원하는대로 작동합니다. – UAS

+0

이것이 맞습니다. 그러나 unbindService (connection)을 호출 한 후에도 myservice (service) 클래스에있는 public 메소드를 호출 할 수 있습니다. 그래서, unbindservice() 메소드로는 아무런 의미가 없다. ??? 그러나 서비스는 onDestroy()를 호출하여 소멸됩니다. – yokks

1

bindService에서 Context.BIND_AUTO_CREATE을 사용했습니다. 나는 저를 위해 그것의 일 완벽을 적용한 후에 동일한 문제점을 가져온다.

bindService(new Intent(this,XMPPService.class),mConnection, Context.BIND_AUTO_CREATE);