Загрузка нескольких файлов одновременно в приложениях Android

Я пишу приложение для Android, которое позволяет пользователям просматривать список файлов и загружать их. Для каждой загрузки я создал поток, и я загружаю файл с экземпляром HttpURLConnection (путем чтения из соединения в цикле while).

Этот метод отлично работает с одной активной загрузкой. Но когда пользователь запускает более одного, производительность загрузки резко снижается. В большинстве случаев эти параллельные загрузки потребляют всю полосу пропускания, и пользователи не могут просматривать файлы (которые используют другой HttpUrlConnection для загрузки списка файлов).

Любые предложения по оптимизации системы загрузки? Спасибо.

P.S.: Метод, который популярные браузеры, такие как Google Chrome и Firefox, кажется хорошим. Кто-нибудь знает, как они работают?

Ответ 1

Увы, я не знаю способа дросселирования определенных соединений. Тем не менее, практический подход состоял бы в том, чтобы реализовать очередь загрузок, чтобы контролировать количество одновременных загрузок. В вашем случае вы, вероятно, захотите только один раз загрузить одну вещь. Это можно реализовать несколькими способами.

Здесь можно сделать это с помощью Handlers и Looper: http://mindtherobot.com/blog/159/android-guts-intro-to-loopers-and-handlers/

Изменить 1: См. Комментарий для мышей. Возможно, более умным будет загружать максимум 2 потока.

Ответ 2

Возможно, вы захотите проверить класс DownloadManager в SDK для Android. Его единственный доступный выше или равный уровень api 2.3.

http://developer.android.com/reference/android/app/DownloadManager.html

Некоторые учебные пособия, которые вы, возможно, захотите увидеть.

http://jaxenter.com/downloading-files-in-android.1-35572.html

http://www.vogella.de/blog/2011/06/14/android-downloadmanager-example/