1

저는 앱 컨텍스트에 바인딩 된 서비스를 가지고 있습니다.이 서비스는 별도의 프로세스로 실행됩니다 (#service_process라고 말하면됩니다). 잡히지 않는 예외를 던져서 앱 크래시를 시뮬레이트하고 앱의 기본 프로세스 (#main_proccess)가 중지되어 주요 앱 컨텍스트를 포함하여 구성 요소를 죽이고 GCing하는 것입니다. 서비스도 언 바운드 (연결 끊김) 및 파괴되었습니다 (서비스 # onDestroy()가 호출되었습니다).서비스가 파괴 된 후 원격 프로세스 호스팅 서비스는 어떻게됩니까?

그러나 #main 프로세스가 종료 된 후에도 #service_process는 $ adb shell ps | grep com.my_app에 따라 계속 유지됩니다.

누구나 그러한 행동에 대한 이유를 설명 할 수 있습니까? # service_process가 'dangling'하는 것을 피할 수 있습니까?

답변

0

실제로 서비스 프로세스는 전경 프로세스와 크게 다르지 않습니다. here

바와 같이 안드로이드의 독특하고 기본적인 기능은 응용 프로그램 프로세스의 수명이 직접 응용 프로그램 자체에 의해 제어되지 않는 것입니다. 대신 시스템에서 실행중인 응용 프로그램 부분의 조합을 통해 시스템에서 결정되며, 이러한 점이 사용자에게 중요하며 시스템에서 사용할 수있는 전체 메모리 크기는 입니다.

그리고이 하나 모든 전경 및 보이는 과정을 유지하는 메모리가 충분하지 않는

서비스 프로세스 ... 그래서 시스템이 항상 실행 등의 프로세스 을 유지합니다.

+0

내가 설명한대로 서비스에 바인딩하고 시작하지 않으므로 '3'이 없습니다. 서비스 프로세스 '. 나는'5.에 의해 언급되는 것을 가지고 있을지도 모른다. 빈 프로세스 ' – kiruwka

+0

당신이 바인딩하거나 startService()를 호출하면 문제가되지 않기 때문에 그렇게 생각하지 않습니다 (두 가지 방법 모두 프로세스가 시작되지만 바인드 된 경우 바인딩이 설정됩니다). 실제로 onDestroy를 호출하는 것만으로 중요하지만 프로세스 수명이 아니라 내 이해에 따라 중요하며 바인딩/프로세스 수명 관계에 대한 정보를 찾을 수 없습니다. – sandrstar

관련 문제