В моем приложении мне нужно скачать кучу файлов. В моем первоначальном плане использовался отдельный AsyncTask для каждого файла, поэтому я могу уведомить остальную часть приложения, когда загружается каждый файл. Я обнаружил, что он тестирует, что, хотя это работает, кажется, что он действительно неэффективен в работе. Есть ли хороший способ использовать одну AsyncTask или, возможно, службу для загрузки файлов и уведомления о каждом файле?Android: правильный способ загрузки большого количества файлов
ответ
Там нет причин, чтобы использовать многочисленные AsyncTask
с, так как вы можете создать список имен файлов, передать его в одном AsyncTask
, и после того, как каждый файл будет загружен, опубликовать ход загрузки с publishProgress()
и onProgressUpdate()
, который запускается в UI и может легко уведомлять о других действиях в вашем приложении.
private class DownloadFilesTask extends AsyncTask<URL, String, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
for (int i = 0; i < count; i++) {
Downloader.downloadFile(urls[i]);
publishProgress(urls[i].toString());
}
return 0;
}
protected void onProgressUpdate(String... progress) {
// notify whomever you like with url from progress[0]
// this is run on UI thread
}
protected void onPostExecute(Long result) {
// do something else
// this is also run on UI thread
}
}
привет, вы можете здесь пример кода? Пожалуйста. – Hasmukh
Удаленная служба будет работать, но я думаю, что это неправильный подход, так как у вас есть только ограниченная функциональность.
Я бы использовал AsyncTask, но вызвал его методом.
Когда вы закончите работу в AsyncTask, снова вызовите метод, который будет создавать новую AsyncTask после удаления элемента в списке или обновления некоторого счетчика.
Помните, что AsyncTask нельзя использовать повторно, поэтому его нужно создавать каждый раз.
С точки зрения памяти и сети вам будет лучше использовать только один AsyncTask (или поток Java) и загружать все файлы по одному. Это значительно улучшает оперативность устройства и также потребляет немного памяти. В случае, если вы можете контролировать серверную сторону, я также предлагаю вам заархивировать файлы меньшего размера в один архив (мой проект также загружает большое количество файлов через HTTP), и он показывает значительное улучшение скорости, если файлы объединяются в архивы размером около 2 -4 МБ и загружается. Если вы загружаете только TCP/IP-соединение, не имеет значения, насколько велики файлы, если вы не будете повторно устанавливать соединение каждый раз. Но опять же для HTTP самый большой трафик времени обычно является установлением соединения.
- 1. Использование R для загрузки большого количества файлов
- 2. загрузка большого количества файлов
- 3. Правильный способ загрузки нескольких файлов
- 4. Переименование большого количества файлов
- 5. Обработка большого количества файлов
- 6. Загрузка большого количества файлов Drupal
- 7. Android - лучший способ показать данные без большого количества файлов макета
- 8. NSurlSession - загрузка большого количества файлов
- 9. Хранение большого количества файлов
- 10. Сканирование большого количества файлов
- 11. Обработка большого количества файлов
- 12. Удаление большого количества файлов
- 13. Организация большого количества загрузок файлов
- 14. Пакетное удаление большого количества файлов
- 15. HDFS - загрузка большого количества файлов
- 16. Чтение большого количества файлов быстро
- 17. Эффективно Разбор большого количества файлов
- 18. Сочетание большого количества файлов netCDF
- 19. Хранение большого количества изображений android
- 20. Обработка большого количества файлов C#
- 21. Правильный способ загрузки mutilple файлов с сервера в Android
- 22. Правильный способ получения большого количества данных в объекте PHP5
- 23. Индексирование большого количества XML-файлов
- 24. Обработка большого количества файлов JSON
- 25. rubyj обработка большого количества файлов
- 26. Слияние большого количества XML-файлов
- 27. Конкатенация большого количества файлов HDF5
- 28. Сортировка большого количества сжатых файлов
- 29. Icefaces: Загрузка большого количества файлов?
- 30. Ошибка SharePoint 2010 0x80131904 после загрузки большого количества файлов
Возможно, просто создайте еще один 'AsyncTask', когда все будет готово, загрузив следующий файл в ваш большой список. –
Я бы попытался найти решение, которое сочетает в себе преимущества как последовательного, так и параллельного выполнения загрузок. Это, вероятно, означает написание простого «менеджера», который управляет очередью с загружаемыми файлами и активными задачами загрузки. Если вы ограничиваете количество параллельных загрузок, например, 4 (только случайно выбранный номер - вы можете попытаться оптимизировать это эмпирически или даже на устройство на основе его параметров), вы, вероятно, получите наилучшие результаты с точки зрения соотношения производительности/памяти. –