2014-12-26 6 views
1

서비스로 실행되는 장기 실행 프로그램이있는 경우 서비스가 주 응용 프로그램 스레드에서 실행되므로 작업을 수행하기 위해 스레드를 시작해야합니다. 내가 얻지 못하는 것은 "startForeground()"라고 말하면서 서비스를 중요하게 표시 할 수 있지만 그 특성은 서비스 (아마도 서비스 객체)에 묶여 있고 스레드와는 아무런 관련이 없다는 것입니다.startForeground는 android 서비스에서 시작된 스레드에 어떤 영향을 줍니까?

이 특성은 서비스의 onStartCommand 호출에서 시작된 스레드의 수명에 어떤 영향을 줍니까?

내가 받고있는 것은, 스레드가 포 그라운드로 플래그 된 것이 아니기 때문에 안드로이드가 그 스레드를 죽이지 않는 것을 어떻게 알 수 있습니까? 플래그가 붙은 서비스입니다. 5 개의 스레드를 시작하면 어떻게됩니까? 나는 서비스의 전경과 서비스가 생성되는 스레드의 우선 순위 사이의 관계를 설명하는 문서를 찾을 수 없습니다.

답변

2

서비스가 기본 응용 프로그램의 스레드에서 실행되기 때문에

객체가 자바에서 스레드에서 실행되지 않습니다. 메소드가 수행합니다. 서비스의 라이프 사이클 메소드 (예 : onStartCommand())는 기본 애플리케이션 스레드에서 호출됩니다.

이 특성은 서비스의 onStartCommand 호출에서 시작된 스레드의 수명에 어떻게 영향을 줍니까?

startForeground() 노후화, 메모리 부족 등으로 인해 Android가 자동으로 프로세스를 종료 할 가능성이 줄어 듭니다.

어떻게 안드로이드는

안드로이드 자체에 스레드를 죽이지 않는 스레드를 죽일 알지 않습니다. Android는 자체적으로 프로세스를 종료합니다.

5 개의 스레드를 시작하면 어떻게됩니까?

그런 다음 5 개의 스레드를 시작합니다.

서비스의 전경과 서비스가 생성되는 스레드의 우선 순위 사이의 관계를 설명하는 문서를 찾을 수 없습니다.

그들은 서로 관련이 없습니다. "서비스의 전경 (foreground-ness)"과 안드로이드 북 작가의 머리카락 양 사이의 관계를 설명하는 문서는 찾을 수 없습니다.

또한 스레드와 관련하여 장수명과 우선 순위가 서로 얽혀있는 것처럼 보이며 이러한 요소는 서로 관련이 없습니다. Android와 다른 점은 Java와 관련이 있습니다.

+1

아쉽게도 안드로이드는 프로세스 자체를 종료합니다. 나는 전체 애플리케이션이 아닌 서비스 만 죽일 것이라고 생각했다. 따라서 실제로 수행하는 작업은 전체 애플리케이션을 서비스가 아닌 중요한 것으로 지정하는 것입니다. – stu

+0

더 이해하기 쉽기 때문에 나는 당신과 의견을 같이하고 싶지만, http://developer.android.com/reference/android/app/Service.html이 서비스를 구체적으로 언급하고 있습니다.서비스와 동일한 프로세스 (예 : 활동)에서 실행되는 다른 애플리케이션 구성 요소는 물론 서비스 자체의 중요성을 넘어 전체 프로세스의 중요성을 높일 수 있습니다. 어느 것이 전체적으로 과정에 적용되는 살인에 대한 당신의 요지에 호의적 인 말입니다. – stu

관련 문제