0

저는 두 가지 활동으로 묶여있는 서비스를 가지고 있는데, 각각 ServiceConnection을 사용합니다.Android : 바운드 서비스가 언제 삭제되었는지 어떻게 알 수 있습니까?

각 활동은 서비스를 사용하기 전에 서비스가 이미 사용 중인지 확인해야합니다. 따라서 서비스에서 현재 수행중인 서비스의 세부 정보를 반환하는 함수 (예 : getCurrentId())가 있습니다. 는 그런 다음 클라이언트 활동, 서비스 연결이 설정됩니다 :

activity.bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 

및 바인딩 해제 :

private MyService mService = null; 
private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder binder) { 
     MyService.MyBinder myBinder = (MyService.MyBinder) binder; 
     mService = myBinder.getService(); 
     activeId = mService.getCurrentId(); 
     log.i(TAG, "Service bound"); 
    } 
    public void onServiceDisconnected(ComponentName className) { 
     log.i(TAG, "Service has been killed"); 
     mService = null; 
    } 
}; 

A 버튼 토글이 서비스에 바인딩

activity.unbindService(mConnection); 

나는 아니에요 전화는 startService()입니다. 나는 서비스에 바인딩하기 전에 이미 활성화 그리고 그것은 무엇을하는지 경우

, 내가 확인 :

if (mService == null) 
    activeId = -1; 
else 
    activeId = mService.getCurrentId(); 

활동이 결합 다음 서비스에서 바인드 해제하면 문제가이며, 서비스 onDestroy() 메서드가 호출됩니다 (이걸 확인하기 위해 로그인했습니다). BUT 트리거 onServiceDisconnected()이 아닙니다.

그래서 mService는 null로 설정되지 않으며 if 문에 도달하면 행복하게 전달되고 getCurrentId()이 호출되어 이전 세부 정보가 반환됩니다.

서비스가 실행중인 스레드가 예기치 않게 종료 될 때 onServiceDisconnected()이 호출되는 것으로 가정하므로 바인딩 해제를 사용하는 마지막 활동으로 인해 서비스가 파괴 될 때 호출되지 않습니다.

내가 알 수있는 한, 서비스는 다시 인스턴스화되지 않고 있으며, 전반적으로 로깅됩니다. 다른 콜백 함수 또는 ServiceConnection이 서비스가 결합 해제에 의해 파괴 된 것을 통지 어떤 방법이

있습니까 : 나에게 두 가지 질문을 제공

?

서비스 이 파괴 된 경우 어떻게 계속 기능을 호출 할 수 있습니까? 아니면 실제로 뭔가를 호출하지 않고 ServiceConnection 또는 Binder 값을 반환하는 것입니까? 서비스에 대한 연결이 끊어졌습니다 때

답변

0

onServiceDisconnected()

라고합니다. 일반적으로 서비스를 호스팅하는 프로세스가 손상되었거나 종료 된 경우 이 발생합니다.

Android docs에서 인용. 이것은 매우 드문 경우 인 것처럼 보이며 서비스에서 정상적으로 바인딩 해제 될 때 호출되지 않습니다.

서비스와의 연결을 유지하려면 onResume 작업의 서비스에 바인딩하고 onPause 메서드에서 바인딩 해제하는 것이 좋습니다.

+0

onServiceDisconnected()는 활동이 여전히 바인딩되어있는 동안 서비스가 파괴되면 (예 : 작업이 완료 될 때) 호출됩니다! 이것은 매우 드문 경우는 아닙니다. 그러나 onUnbind() 다음에 onDestroy()가 호출되면 onServiceDisconnected가 호출되지 않습니다. – Bhiefer

관련 문제