2017-04-10 2 views
0

나는 공식 안드로이드 문서를 읽은 그들은 바운드 서비스는 한 또 다른 응용 프로그램 구성 요소가 결합 그대로 실행바운드 서비스는 그 서비스로 묶인 마지막 활동이 파괴 될 때 파괴됩니까?

말한다.

따라서 본인은 해당 활동에서 활동이 있고 그 활동에서 서비스를 호출하면 활동이 파괴 될 때도 서비스가 파괴된다는 것을 알고 있습니다.

이 버튼은 뒤로 버튼을 누르고 애플리케이션을 종료 할 때 잘 작동합니다.

문제는 : 내가 활동에서 onDestroy() 콜백이 호출되는 화면을 회전하지만, 서비스에서 onDestroy() 콜백이 호출되지 않을 때 ...

공식 문서에서 계정에 위의 인용을 촬영 누군가 왜 이런 일이 일어 났는지 설명 할 수 있습니까?

해당 서비스로 묶인 활동은 하나뿐입니다.

+0

아무도 그 서비스에서'startService()'를 호출하지 않으면, 마지막 클라이언트가 서비스로부터 언 바인딩되면 서비스는 파괴 될 것이다. 언제 어디서'unbindService()'를 호출합니까? – CommonsWare

+0

서비스의 활동을 바인딩 해제 하시겠습니까? – DeeV

+1

단순 : 너무 빠르기 때문에. 서비스는 더 이상 필요하지 않을 때 즉시 파괴되지 않습니다. 보통 그들은 짧은 시간 동안 계속 실행됩니다. 여기서 가장 중요한 부분은 독자적인 독립 라이프 사이클을 통해 완전히 다른 두 가지 구성 요소를 다루는 것입니다. 귀하의 활동이 파괴되는 것은 봉사에 아무런 의미가 없습니다. 문서에서 알 수있는 것은 클라이언트가 묶여있는 한 서비스가 파기되지 않는다는 것입니다. 그렇다고해서 클라이언트가 서비스와 함께 사망하지 않는 경우가 아닙니다. –

답변

0

Service 상태의 문서.

서비스를 시작하고 연결을 바인딩 할 수 있습니다. 이 경우 시스템은 서비스가 시작되거나 Context.BIND_AUTO_CREATE 플래그로 하나 이상의 연결이있는 한 서비스를 계속 실행합니다. 이러한 상황이 발생하지 않으면 서비스의 onDestroy() 메서드가 호출되고 서비스가 효과적으로 종료됩니다. onDestroy()에서 복귀 할 때 모든 정리 (스레드 중지, 수신자 등록 취소)가 완료되어야합니다.

따라서 활동 분리로 바인딩 해제하거나 다른 연결을 바인딩하지 않았거나 직접 서비스를 시작하지 않으면 서비스도 파괴됩니다.

서비스에서 바인딩 해제해야합니다.

관련 문제