Intereting Posts

Android Загрузить несколько файлов и показать прогресс в ListView

У меня есть N файлов для загрузки. Я хочу загрузить их последовательно в фоновом режиме – один за другим. Я хочу показать прогресс и статус в ListView. Итак, ListView выглядит так:

Файл1 … скачал

File2 …. скачал

File3 … в прогресс говорит 39%

Файл4 … Ожидание

….

Listview обновляется периодически (скажем каждые 2 секунды) и файлы большие: 50 МБ или около того. Поэтому они берут 1 минуту плюс для загрузки.

Я передам список URL-адресов файлов в AsyncTask и загрузим их в фоновом режиме. Вопрос в том, как вы возвращаете результаты в ListView.

Учтите, что пользователь может перейти от страницы ListView, оставив AsyncTask только для возврата к просмотру статуса загрузки.

Итак, как ListView «отслеживает» прогресс AsyncTask и отображает его?

Я думаю добавить набор статических переменных AsyncTask (защищая их с помощью блоков «Синхронизированный») и использовать периодический UI Updater внутри Fragment, который отображает ListView. Таким образом, фрагмент будет иметь что-то вроде этого:

Повторить задачу с задержкой?

Есть ли шаблон дизайна, публичный проект или образец кода для этого?

Извините, у меня нет хорошей картины. Ближе всего к тому, что я описываю здесь (похоже, но я планирую использовать AsyncTask и серийную загрузку):

Картина

Solutions Collecting From Web of "Android Загрузить несколько файлов и показать прогресс в ListView"

Следуй этим шагам

  1. Создайте в нем службу asyncTask для загрузки файла
  2. Запустите задачу в службе onStartCommand
  3. Зарегистрируйте радиоприемник в своей деятельности, чтобы получить доступ к службе
  4. OnProgressUpdate of AsyncTask отправляет трансляцию вашей активности
  5. Отобразить прогресс в ListView

При загрузке вы можете использовать ссылку на индикатор выполнения и обновить его с помощью обработчика.

Asynctask не будет хорошей идеей для вас. Вы должны прочитать это, прежде чем прыгать глубоко в Asynctask.

Для длительной фоновой работы вы должны посмотреть Сервис . [IntentService] является хорошим кандидатом для этого, поскольку его очередь использует для отслеживания нескольких запросов. Boundservice этот случай хороший вариант.

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