0

나는 ServiceConnection 일반 안드로이드가 :응용 프로그램 충돌시 onServiceDisconnected가 호출되지 않는 이유는 무엇입니까?

내가 지금처럼 onServiceDisconnected() 메서드를 재정의하고 있습니다 :

private ServiceConnection myConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 

    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     System.out.println("MyTag why are you not getting called"); 
    } 
}; 

및 서비스가 바인더 제본과 잘 시작됩니다. 나는 서비스가 연결된 후 잠시 후 의도적으로 응용 프로그램을 중단합니다. 그러나 onServiceDisconnected은 호출되지 않습니다. 왜 그런가요?

밖으로 사용자가 단지 평면 가정이 프로세스를 종료/또는 실수 : 앱 충돌 ...

난 달성하기 위해 노력하고있어 일이있을 때마다 문서에 따르면,이 호출받을 예정이다 충돌이 발생하면 특정 상황이 발생하기를 원합니다. (예 : 알림 취소 ... 현재 활동의 onStop()에서 수행중인 작업). 어디에서 알림을 취소해야합니까? 앱이 추락하면 서비스를 끊을 수 있습니까?

+0

내 생각에 [this] (http://stackoverflow.com/questions/971824/when-does-serviceconnection-onservicedisconnected-get-called)이 당신이 찾고있는 것입니다. – Dariush

답변

2

앱이 충돌하거나 서비스에서 서비스의 바인딩을 해제 할 때도 onServiceDisconnected(...)이 (가) 호출 된 적이 없습니다. OS가 메모리를 절약하기 위해 그것을 죽이기로 결정했기 때문에 서비스가 바운드 활동의 아무런 행동없이 죽는 경우에만 호출되는 것 같습니다. 의도적으로 그런 일이 일어나는 것을 나는 모른다. 서비스에 의도적 인 충돌을 추가하고 어떤 일이 발생하는지 볼 수는 있지만 서비스가 자체 프로세스에서 실행되고 있지 않으면 앱 전체가 중단 될 수 있습니다.

많은 기기에서 블루투스가 극단적으로 희박하고 앱이 다운 될 때 블루투스 소켓이 열려 있기 때문에 어댑터가 크래시되거나 죽을 경우 몇 가지 일이 발생하는지 확인해야 할 필요가있었습니다. 휴대 전화 나 태블릿이 재부팅 될 때까지 동일한 기기/UUID에 다시 연결할 수없는 상태입니다. 서비스가 자체 프로세스에서 실행 중이 아니면 응용 프로그램이 충돌 할 때 서비스의 onDestroy()도 호출되지 않는 것으로 나타났습니다. 경로를 결정할 경우 서비스가 Application 클래스의 자체 복사본을 상속한다는 사실을 명심하십시오. 따라서 전역 데이터를 보유하도록 확장 한 경우 해당 서비스는 자체 복사본을 모두 갖게됩니다.

+0

예 ... 문제는 "onStop()"호출에서 앱이 충돌 할 때 일어나는 일이 발생하지 않는다는 것입니다. –