Загрузка нескольких файлов одновременно в приложениях 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/