2010-08-19 3 views
7

android에서 스레드와 서비스 사이에 혼란스러워합니다. 서버에서 파일을 다운로드해야하는 경우. 한 번에 여러 개의 파일 일 수 있습니다. 이 상황, 스레드 또는 서비스에서 무엇을 선택해야합니까?스레드 또는 서비스

답변

13

Doing Stuff을 Service (으)로 설정해도 백그라운드에서 실행되지 않습니다. 다운로드가 완료되기를 기다리기 위해서도 서비스에 스레드를 생성해야합니다.

활동에 로컬 인 스레드를 사용하는 경우 작업을 떠나는 데 문제가 있거나, 걸려 오는 전화 등으로 인해 배경이나 중단으로 전송할 수 있습니다. 이로 인해 앱이 OS에서 메모리를 확보하십시오. 이 경우 스레드가 손실되어 다시 시작되지 않고 앱이 다운 될 수도 있습니다.

서비스를 만들면 죽여 버릴 확률이 적어지고 OS에 의해 서비스가 중단 된 후에 OS를 지정하여 서비스를 다시 시작할 수 있습니다. 이로 인해 서비스는 매우 긴 다운로드에 대해보다 안전한 선택이됩니다. 나는 내 애플 리케이션 중 하나에서 서비스를 사용하여 20 MB 파일을 다운로드하고이 서비스에서 다운로드를 수행하는 스레드를 만듭니다.

서비스는 다운로드를 캡슐화하고 활동에서 분리하는 데 도움이되며 OS가 메모리 부족으로 인해 스레드가 사라지지 않도록하는 또 다른 상태를 제공합니다.

+0

답변 해 주셔서 감사합니다. 그래서 스레드를 저장하는 서비스를 도와야합니까? –

+0

또한 Android 프로세스 중요도 계층에는 다섯 단계가 있습니다. 그리고 @Janusz는 "스레드 또는 서비스 사용"은 프로세스의 중요성에 영향을 미칠 수 있다고 말했습니다."서비스를 실행하는 프로세스는 백그라운드 활동이있는 프로세스보다 순위가 높기 때문에 장기 실행 작업을 시작하는 활동은 단순히 작업자 스레드를 작성하는 것이 아니라 해당 작업에 대한 서비스를 시작하는 것이 좋습니다. 아마도 활동보다 오래 지속될 것 "이라고 말했다. –

+0

"예를 들어, 그림을 웹 사이트에 업로드하는 활동은 사용자가 활동을 떠난 경우에도 업로드를 백그라운드에서 계속할 수 있도록 업로드를 수행하는 서비스를 시작해야합니다." http://developer.android.com/guide/components/processes-and-threads.html –

0

스레드는 한 응용 프로그램의 백그라운드에서 작업을 수행하는 데 적합합니다. 여러 응용 프로그램에이 기능이 필요한 경우 서비스를 사용하려고합니다.

0

다른 Apps가 다운로드 활동 : 통신 서비스와 통신 할 수있는 인터페이스를 제공하려는 경우. 사용자가 UI와 상호 작용할 수 있도록 다운로드가 백그라운드에서 실행되어야하는 경우.

18

이 경우 스레드 또는 서비스에서 무엇을 선택해야합니까?

"또는"이 아닙니다. 그것은 "and"입니다. 백그라운드 스레드 인 서비스를 사용합니다.

서비스는 UI가 없다는 점에서 UI 관점에서 "백그라운드에서"입니다. 서비스는 스레딩 관점에서 자동으로 "배경에"있지 않으며,이 응용 프로그램의 모든 활동이 공유하는 동일한 스레드 인 주 응용 프로그램 스레드에서 모두 onCreate(), onDestroy(), onStart()onBind()이 호출됩니다. 다운로드와 같이 오랫동안 실행되는 것은 AsyncTask을 사용하는 것과 같이 기본 응용 프로그램 스레드 외부에서 수행해야합니다.

트리거 된 활동이 파괴 되더라도 다운로드를 계속해야하는 경우 다운로드를 완료하려면 AsyncTask 또는 백그라운드 스레드를 사용하는 서비스와 함께 서비스를 사용해야합니다. 정규 서비스와 백그라운드 스레드를 결합한 IntentService을 사용하는 것이 더 좋습니다.

+0

에서 정말 잘 설명되어 있습니다. 매우 이해하기 쉽습니다. – webgenius

+0

답변 해 주셔서 감사합니다! 그래서 스레드를 저장하는 서비스를 도와야합니까? –

0

귀하의 질문은 이미 documentation에 있습니다. 오른쪽 열을 확인하십시오.

관련 문제