2013-04-02 4 views
2

Мне нужно загрузить большой файл в моем приложении (почти 2gb), и мне было интересно, что это лучший способ сделать это и некоторые библиотеки, которые мне помогут. Сначала я посмотрел Android Asynchronous Http Library, но я не нашел примеров, показывающих, как публиковать прогресс или запускать, приостанавливать загрузку. Тогда я не знаю, следует ли мне использовать эту библиотеку или просто использовать стандартные http-общие. Другая проблема в том, должен ли я использовать service, чтобы загрузить файл?Лучший способ загрузить большой файл в Android?

Не могли бы вы, ребята, дать подсказку, как это сделать?

ответ

9

Я вижу, что у вас есть куча ответов, и никто из них не отвечает на него с целостной точки зрения.

Для загрузки файла 2k или 2gb фактический код будет идентичным с использованием какого-либо типа обработчика соединения и некоторого типа входного потока и выходного потока и, как правило, обертывания входного потока буферизированным входным потоком. Для этого вы можете найти бесконечное количество примеров Java по всему Интернету.

Трюк с учетом платформы Android заключается в том, что, поскольку это длительная операция, вы не должны делать это внутри жизненного цикла активности вообще.

Говорит, что у вас есть два варианта:

  • , как вы предложили вы можете создать службу, я хотел бы предложить вам использовать IntentService , как это, кажется, идеально подходит для этого случая. IntentService автоматически включает новый поток, за счет того, что вы передаете URL-адрес в виде строки и разрешаете загрузке службы с использованием потоков и т. Д.

  • Другой метод, который, вероятно, работает хорошо, но я никогда не использовал его лично для использования DownloadManager, который доступен с Gingerbread. Это не должно быть трудно назвать getSystemService(Context.DOWNLOAD_SERVICE) и вызвать dwManag.enqueue(dwRequest);

надеюсь, что это помогает.

1

Если вы не настроили таргетинг на устройства с предварительным указателем, я бы использовал DownloadManager, как это было предложено в качестве третьего варианта ответа, на который вы ссылались. Он заботится о загрузке файла, отображает прогресс на панели уведомлений, чтобы пользователь мог видеть, что происходит, даже после того, как ваше приложение ушло в фоновом режиме, и вам не нужно так беспокоиться о том, что происходит, когда пользователь идет в другое приложение, и андроид решает убить ваше приложение в свободной памяти. Кроме того, он работает с такими функциями, как «только скачивание файлов через Wi-Fi», которые, по крайней мере, имеют некоторые сборки Android.

0

Предлагаю вам использовать диспетчер загрузки adm. Загрузки никогда не сбой, даже если нет сети, и скорость также лучшая.

+3

Менеджер загрузки не поддерживает ответы с кодом статуса перенаправления HTTP (это был именно мой случай). –

Смежные вопросы