2016-08-13 2 views
2

내 주요 활동에서 onCreate에 대한 서비스가 호출됩니다. 서비스는 IntentService가 아닌 Service 클래스에서 확장됩니다. 스레드가 호출되면 무한 루프가 발생합니다. 스레드가 예외를 throw하고 서비스를 닫은 다음 서비스를 호출하면 (try catch 블록에 의해 처리됩니다.).서비스가 android로 종료 된 후에도 스레드가 계속 실행됩니까?

결국 어떤 이유로 든 서비스는 Android에 의해 종료됩니다.

다음 질문에 답해주십시오 : 내 스레드가 계속 실행 하는가

A)를?

..... 그렇다면 나중에 언제든지 예외가 발생하면 서비스가 호출됩니까?

.... 그렇지 않은 경우 예외가 발생하여 서비스가 다시 시작됩니다.

B) 내 서비스를 끄면 안드로이드가 내 스레드를 돌릴 수 있습니까?

안드로이드가 내 서비스를 취소하기로 결정할 때 내 응용 프로그램이 어떻게되는지 이해하려고합니다.

답변

1

스레드가 실행중인 동안 "가비지 수집 루트"로 간주됩니다. 따라서 스레드 자체와 해당 스레드에서 도달 할 수있는 다른 객체는 가비지 수집되지 않습니다. Android 프레임 워크가 간섭하지 않으면 무한 루프가있는 스레드가 계속 무기한 실행됩니다. 스레드가 서비스를 "닫을"수 있기 때문에 서비스에 대한 참조 (암시 적 또는 명시 적)가 있다고 가정하므로 전체 서비스가 메모리에 남아 있습니다.

그러나 Android에는 앱의 메모리 사용량을 모니터링 할 수있는 수단이 있으며 메모리를 확보하기 위해 앱을 종료 할 수 있습니다. Android가 앱을 죽이면 앱의 전체 프로세스가 종료됩니다. 프로세스가 종료되면 모든 스레드가 중지되고 연관된 스레드 메모리가 해제되므로 더 이상의 활동이 수행되지 않습니다.

서비스 종료 인 것처럼 보이지만 Android는 서비스가 STICKY로 지정 될 수 있으며 가능한 한 빨리 서비스를 다시 시작하려고 시도 할 수있는 추가 메커니즘을 제공합니다. 자세한 내용은 this answer에서 논의됩니다.

참고 문헌 :

이 답변에서 제공하는 정보의 대부분은 official Services pagejavadoc of service class에 덮여있다.

다른 프로세스에서 실행되는 Service의 더 복잡한 시나리오에 대해서는 거의 문서가 없지만 많은 블로그가 있습니다. 나는 또한 주제에 대한 글을 올렸습니다. How to establish a reliable (crash and kill tolerant) connection to bound IPC (e.g. AIDL) Service in Android

+0

와우 감사합니다. 정확히 알고 싶었습니다. 이것이 문서화 된 곳을 물어봐도 될까요? 내가 당신의 잘못을 생각하기 때문에가 아니라 질문이 많습니다. 그리고 직접 찾아 보는 것이 더 쉽습니다. P – AndroidStudent

+0

@AndroidStudent, 여러분 환영합니다. 나는 대답의 끝에 거의 참고를 추가하지 않았다 – Vasiliy

+0

대단히 고맙습니다 - 매우 도움이 :) – AndroidStudent

관련 문제