2011-07-29 6 views
3

Activity 또는 IntentService에서 AsyncSync가 실행되는 것과 다른 점이 있습니까?AsyncTask가 Service (IntentService) 및 Activity에서 실행되었습니다. 차이점이 있습니까?

http를 통해 파일을 다운로드하고 업로드하는 앱을 만들고 있습니다. 각 전송마다 진행률 표시 줄이있는 사용자 정의 알림 레이아웃을 사용합니다. 전송을 병렬 처리하거나 대기열에 넣는 것 중에서 선택하십시오 (어떤 옵션을 권하고 싶습니까?).

대기열이있는 옵션의 경우 IntentService를 사용하므로 안드로이드 프레임 워크가 대기열에 작업을 넣습니다. AsyncTasks를 사용하여 병렬로 처리합니다. 하지만 IntentService (서비스도 될 수 있음)에서 시작합니다. - 어떤 점이 있습니까? IntentService는 AsyncTask를 실행 한 직후 종료되므로 AsyncTask는 "부모"없이 실행됩니다.

Activity에서 AsyncTask를 실행 한 경우 홈 화면으로 이동하여이 활동을 종료하기로 결정한 경우 어떻게해야합니까? 그럴 수 있니? AsyncTask가 그것을 살아남을 수 있습니까?

이 경우 바람직한 접근 방법은 무엇입니까?

답변

1

AsyncTask는 구성 요소의 수명주기 밖에서 살아남는 것이 우려되는 곳 (해당 구성 요소에 다시 메시지를 보낼 필요가있는 경우)에는 적합하지 않습니다. 서비스를받는 범위에 가면 AsyncTasks를 사용하지 않아도됩니다. 병렬 또는 대기열에 관한 한, 실제로 많은 다른 변수에 따라 달라 지지만, 어떤 수의 다운로드/업로드에도 완전히 병렬로 적용하지는 않습니다. 동시 전송의 최대 수에 대해 몇 가지 제한을 설정했습니다.

병렬 실행을 위해 IntentService를 사용하는 것은 의미가 없습니다. 이미 문제를 지적했습니다. 안드로이드 API에서 실제로 다루지 않는 영토에 들어가고 있습니다. AsyncTask와 IntentService는 여러 가지 시나리오를 쉽게 만들어주는 좋은 추상화이지만 많은 많은 작업의 병렬 실행은 그 중 하나가 아닙니다. Java 스레딩/동시성 클래스 중 일부를 사용하는 것이 가장 좋습니다. ThreadPoolExecutor을보십시오.

+0

응답 해 주셔서 감사합니다. 나는 IntentService 옵션으로 갔고 전송 대기 중이다. 이것은 여러 파일을 동시에 업로드/다운로드하는 것보다 연결이 항상 안정적이지 않은 모바일 환경에서 더 좋은 아이디어 인 것 같습니다. – bitrut

0

처음에는 쉽게 부모 응용 프로그램이 종료되지 않는 한 AsyncTask가 백그라운드에서 유지됩니다. 액티비티에서 시작하면 메모리 부족으로 인해 필요할 수 있다고 시스템에 알려줍니다. 또한 시스템은 중단 될 수있는 장기 실행 프로세스가있는 것으로 간주하지 않습니다.

dev 가이드 Services에는 "기본 사항"아래에 훌륭한 정보 상자가있어 서비스 또는 활동을 사용해야하는지 여부를 나타냅니다. 활동은 시스템 자원이 다시 사용 가능하게 될 때 킬 (kill) 후에 서비스가 얻거나 재시작 할 때 고려해야 할 메모리 압박 고려 사항을 얻지 못합니다.

전화를 걸려면 IntentService를 사용하십시오. 네트워크를 (Wifi 또는 셀룰러), 파일 크기 및 기타 시스템 리소스를 고려해야하기 때문에 다운로드를 병렬 또는 시리즈 또는 일부 조합으로 실행할지 여부는 어려운 결정입니다.