저는 Android 토런트 앱에서 작업하고 있으며 동시에 여러 급류를 다운로드 할 수 있어야합니다. 나는 그것을하고있는 다른 응용을 보았다. 토런트 안드로이드 앱에서 10 가지 이상의 토렌트를 동시에 다운로드 할 수 있습니다. 현재 비동기 작업이있는 서비스를 사용하고 있지만 동시에 5 개 이상을 실행할 수는 없습니다 (Running multiple AsyncTasks at the same time -- not possible?). 이것이 어떻게 이루어질 수 있는지에 대한 아이디어가 있습니까?android에서 여러 다운로드를 시작하는 방법
답변
모든 AsyncTasks 공유 정적 및 LinkedBlockingQueue 등 ThreadPoolExecutor에 의해 내부적으로 제어된다. AsyncTask에서 execute를 호출하면 ThreadPoolExecutor는 나중에 일정 시간이 지나면 실행할 수 있습니다.
'언제 내가 준비 되나요?' ThreadPoolExecutor의 동작은 코어 풀 크기와 최대 풀 크기의 두 매개 변수로 제어됩니다. 현재 코어 풀 크기보다 작은 스레드가 현재 활성 상태이고 새 작업이 들어 오면 실행 프로그램은 새 스레드를 작성하고 즉시 실행합니다. 실행중인 코어 풀 크기의 스레드가 적어도 있으면 작업 대기열에 넣고 사용 가능한 유휴 스레드 (즉, 다른 작업이 완료 될 때까지)가 될 때까지 대기합니다. 작업을 대기열에 넣을 수없는 경우 (대기열은 최대 용량을 가질 수 있음) 작업이 실행될 수 있도록 새 스레드 (최대 풀 크기 스레드까지)를 생성합니다. 비 핵심 유휴 스레드는 결국 연결 유지 제한 시간 매개 변수
안드로이드 1.6 이전에는 코어 풀 크기가 1이고 최대 풀 크기는 10이었습니다. 안드로이드 1.6 이후 코어 공극 크기는 5이고 최대 풀 크기는 128입니다. 대기열 크기는 둘 다 10입니다 사례. keep-alive timeout은 2.3 초 전에 10 초 였고 그 이후로 1 초가되었습니다.
이 모든 것을 염두에두고 AsyncTask가 5/6의 작업 만 실행하는 것처럼 보이는 이유가 이제 명확 해졌습니다. 6 번째 작업은 다른 작업 중 하나가 완료 될 때까지 대기열에 있습니다. 이것은 장기 실행 작업에 AsyncTasks를 사용하지 않아야하는 매우 좋은 이유입니다. 다른 AsyncTask가 실행되는 것을 방지합니다.
완전성을 위해 6 가지가 넘는 작업 (예 : 30 개)으로 연습을 반복하면 대기열이 가득 차고 실행 프로그램이 푸시되어 더 많은 작업자 스레드를 만들면 6 개 이상이 doInBackground에 들어갑니다. 장기 실행 작업을 계속 수행했다면 20/30이 활성 상태가되고 대기열에 10이 계속 남아 있어야합니다.
왜 Android Download Manager를 사용하지 않습니까? 어떻게 다운로드를 관리하는지 모르지만 동시에 많은 파일을 다운로드하는 것처럼 보입니다.
토런트는 http 다운로드하지 않습니다. 문서에서 : "다운로드 관리자는 장기 실행 HTTP 다운로드를 처리하는 시스템 서비스입니다." –
맞아. 죄송합니다. 급류를 다운로드하는 것에 관해서는 아무것도 알지 못했습니다. – osayilgan
- 1. PHP를 사용하여 다운로드를 시작하는 방법
- 2. addon에서 정상적인 다운로드를 시작하는 방법
- 3. 다운로드를 시작하는 위젯 양식
- 4. Android에서 다운로드 관리자를 사용하여 여러 다운로드를 요청하는 방법 2.3.3
- 5. 중단 된 다운로드를 다시 시작하는 방법
- 6. Javascript로 다운로드를 시작하는 방법은 무엇입니까?
- 7. android에서 CountDownTimer - 다시 시작하는 방법
- 8. android에서 위젯 목록을 시작하는 방법?
- 9. Android에서 프로비저닝 앱을 시작하는 방법
- 10. android에서 알림을 클릭하면 다운로드를 시작합니다.
- 11. 진행률 막대 업데이트로 여러 다운로드를 구현하는 방법 ??
- 12. 원격 서버에서 SDCard로 다운로드를 일시 중지하고 다시 시작하는 방법
- 13. Rails Facebook 캔버스 앱에서 파일 다운로드를 시작하는 링크를 추가하는 방법
- 14. Android : android에서 비동기 작업을 시작하는 방법
- 15. android에서 동적으로 시작하는 활동
- 16. Android에서 새 응용 프로그램을 시작하는 방법
- 17. android에서 기본 오디오 녹음 앱을 시작하는 방법
- 18. android에서 인 텐트를 사용하여 viber를 시작하는 방법
- 19. android에서 딥 링크를 사용하여 앱을 시작하는 방법
- 20. Android에서 Java 클래스의 활동을 시작하는 방법
- 21. android에서 서비스로 Alarm Manager를 시작하는 방법
- 22. Bash에서 여러 프로세스를 시작하는 방법
- 23. 메서드에서 여러 스레드를 시작하는 방법?
- 24. 여러 개의 진행률 표시 줄을 동시에 Android에서 동시에 다운로드하는 방법
- 25. NoClassDefFoundError android에서 libGDX를 시작하는 중
- 26. Android에서 활동을 시작하는 방법은 무엇입니까?
- 27. android에서 시작하는 데 문제가 있음
- 28. 파일 다운로드를 추적하는 방법
- 29. 다운로드를 반으로 나누는 방법
- 30. Android에서 여러 클래스 사용 방법
위대한 답변을 주셔서 감사합니다. "장기 실행 작업에 AsyncTasks를 사용하지 않아야하는 이유는 아주 좋습니다. 여러 (장기간) 다운로드를 시작하는 데 사용할 수있는 다른 솔루션을 알고 있습니까? –
여러 가지 방법이 있습니다. http://developer.android.com/training/multiple-threads/create-threadpool.html API 레벨 9의 MultiThreading 메소드를 살펴볼 수 있습니다. DownloadManager가 있습니다. http://developer.android .com/reference/android/app/DownloadManager.html. 또한 Threads ThreadingPool 및 Locks를 사용하여 자신 만의 버전을 구현할 수 있습니다 ... –