2010-06-16 3 views
6

나는 http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/Samples/Downloader큰 파일을 다운로드하려면 AsyncTask 또는 Thread를 사용하는 더 나은 방법이 있습니까?

(나는 아직 그것을 테스트하지 않은) 꽤 좋은 것 같다, 다음 링크에서 큰 데이터 파일을 다운로드 샘플을 발견했습니다. 그러나 나는 또한 위의 예제와 같이 Thread 클래스를 사용하지 않고 AsyncTask 클래스를 사용하여 동일한 작업을 수행하기 위해 stackoverflow에서 일부 게시물을 읽었습니다.

내가 알고 싶은 것은 파일을 다운로드하는 데 사용해야합니까? AsyncTask가 더 좋은 경우 샘플 코드를 가르쳐 주시겠습니까?

답변

7

면책 조항 : 저는 Android 개발자가 아닙니다. 일반적인 답변으로 답변드립니다.

스레드 클래스는 장기 실행 활동에 가장 적합하며 비동기 작업에는 적합하지 않습니다. 작업자 풀을 관리하는 경우를 제외하고 스레드의 수명은 응용 프로그램과 동일하거나 거의 같습니다. 스레드 생성은 값 비싼 작업이라고 생각하십시오.

AsyncTasks 및 기타 도우미는 일반적으로 백그라운드에서 수행하려는 일부 단일 활동에 사용되므로 앱을 차단하지 않습니다. 그들은 보통 플랫폼에 의해 잘 관리되고 싸다.

내 의견 : 가끔씩 페이지를로드하려는 경우 AsyncTask를 사용하십시오. 앱이 페이지를로드 할 경우 백그라운드에서 항상 스레드를 고려하십시오.

+1

나는 답을 쓰고 있었지만 이것은 내가 쓰려고했던 것이다. 그래서 +1. – Cristian

+1

실제 Android 개발자로서 나는 완전히 옳다고 말할 수 있습니다. 한 파일 만 다운로드하고 끊임없이 다운로드하고 업로드하는 경우 스레드 또는 서비스와 함께 비동기 작업으로 이동하십시오 ... 좋은 대답 andrey – Janusz

+0

모두 감사합니다! AsyncTask 클래스를 사용합니다. –

0

다운로드가 진행되는 동안 (사용자가 다른 앱으로 전환 할 때)이 두 옵션은 동일한 가능성을 갖습니다. 그래도 AsyncTask은 덜 혼란 스럽습니다. 대용량 파일을 다운로드하려면 Service을 사용해보십시오.

0

3.0 이전의 Android 버전의 AsyncTasks는 백그라운드에서 스레드 풀을 사용하여 작업을 실행하지만 3.0 이후 버전에서는 단일 스레드를 사용하여 AsyncTasks를 실행합니다.

동시에 많은 요청을해야하고 Android 버전이 3.0 이상인 경우 스레드 풀을 사용하지만 Android 버전을 고려하지 않고 한 번만 다운로드하면됩니다. AsyncTask를 사용하면 스레드 자체를 관리하는 것보다 문제없이 단일 백그라운드 스레드에서 실행됩니다.

관련 문제