Загрузка изображения для Android - Volley vs Picasso

Я ищу решение для загрузки / кэширования изображений с открытым исходным кодом.

Я ищу в:

Залп Google,

Площадь Пикассо

Универсальный загрузчик изображений

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

Разрешает ли Volley загрузку ресурсов с диска??

Пример того, что я хотел бы сделать, доступен с AQuery.

6 ответов

Решение

Залп 'Класс запросов обрабатывает все сетевые запросы. Я не могу найти ресурс загрузки классов с диска..

Если вы согласны с новым / менее стабильным программным обеспечением, я только что выпустил библиотеку с открытым исходным кодом под названием Glide: https://github.com/bumptech/glide

Он предназначен для эффективной загрузки любого изображения, к которому вы можете получить InputStream. Он включает в себя некоторые базовые реализации загрузки http / файлов, но также позволяет вам подключать свои собственные или использовать некоторую внешнюю библиотеку (например, Volley) через обратные вызовы.

Он включает в себя кэширование памяти и диска, а также переработку растровых изображений на новых устройствах. Все, что вам нужно сделать, - это реализовать интерфейс, чтобы получить входной поток для вашей модели данных (путь / URL / URI и т. Д.) И передать его вместе с любыми преобразованиями, заполнителями или анимациями, которые вы хотите, в синглтон Glide.

Рад поговорить с вами или любыми любопытными людьми, мы широко использовали его в Bump для взаимодействия с различными библиотеками.

Я собрал немного важной информации от http://blog.bignerdranch.com/3177-solving-the-android-image-loading-problem-volley-vs-picasso/ (сравнение между более ранним версией Пикассо 2.0 против залпа)

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

Volley, с другой стороны, полностью сосредоточен на обработке отдельных небольших HTTP-запросов. Так что если у вашей обработки HTTP-запроса есть свои причуды, у Volley, вероятно, есть ловушка для вас. Если, с другой стороны, у вас есть странность в обработке изображений, единственная реальная ловушка - это ImageCache. Это не ничего, но это не так уж и много. Но у него есть и другие преимущества: например, когда вы определяете свои запросы, их использование внутри фрагмента или действия безболезненно. И в отличие от параллельных AsyncTasks

Пикассо делает только одно, а Волли пытается решить более общую проблему.

Android плохо обрабатывает изображения с высоким разрешением. У меня небольшая одержимость паттерном отлова OutOfMemoryError в приложениях для Android. Это кажется нелепой тактикой, но Волей - единственный способ надежно справиться с некоторыми сценариями изображения по сравнению с хлопотами с масштабированием Пикассо и корректным подгонкой больших изображений. Пикассо не уважает scaleType атрибут в ваших ImageViews (не уверен, что это исправлено в последней версии).

Тест Ex: Я обнаружил, что Volley перехватывает OutOfMemoryError при загрузке исходного изображения с разрешением вместо уменьшенной версии, по сравнению с версией Picasso не взрывается (он также перехватывает OutOfMemoryError), но Picasso не может загрузить слишком большие изображения, Волей не только не взрывается, но и волейбол отображает все эти большие изображения!!!

По словам Android-хакера Коушика Датты:

Тестирование ВСЕХ образов Android и библиотек http

Я тестировал и тестировал множество различных библиотек загрузки изображений и http-запросов, так как несколько из них были выпущены на прошлой неделе.

Расстановка:

  • AndroidAsync + UrlImageViewHelper (коуш)
  • Залп (гугл)
  • охттп + пикассо (площадь)

Вся поддержка кешированных и условно кешированных ответов, поддержка активности и т.д.

Мысли:

  • Пикассо имеет самый красивый API изображений. Я собираюсь украсть их карри стиль API для моего будущего / текущего материала. Пикассо также заметно медленнее. Особенно на 3g против Wi-Fi. Вероятно, из-за их пользовательского клиента okhttp.
  • UrlImageViewHelper + AndroidAsync - самый быстрый. Игра с этими двумя другими замечательными библиотеками действительно показала, что API изображений довольно устарел.
  • Залп гладкий; Мне очень нравятся их сменные бэкэнд-транспорты, и в итоге я могу добавить туда AndroidAsync. Приоритет запроса
    и отмена управления отличная.

Обновление Это не http-библиотеки. Просто загрузчики изображений. но в комментариях были запросы на сравнение... Android-Universal-Image-Loader - самый популярный в настоящее время. Высоко настраиваемый.

Запрос; как jquery, но для Android? Я думаю, это хорошо, если вы в такой вещи. Не используйте этот хотя; это дерьмо в потоке пользовательского интерфейса или что-то. Загрузка нескольких изображений на Nexus 4 в виде списка создала впечатление, что я снова вернулся на свой HTC G1. Основное заикание.

Тесты с кешами понятны:

Холод это новый запуск приложения. Тёплые кеши прозрачны с http-соединениями, предположительно поддерживаемыми.

Холод / Прогрев (в миллисекундах, в среднем 10 прогонов, очистка данных при каждом прогоне):

  • Пикассо 12142/11892
  • UrlImage 7378/4525
  • Залп 8292/7520
  • Android-Universal-Image-Loader 14484/11243
  • AQuery 11341/9637 (похоже, он блокирует поток пользовательского интерфейса... не используйте его)

Вот база тестового кода: https://github.com/koush/AndroidNetworkBench

Вывод: эти тесты вряд ли являются окончательными. Я только что проверил одновременный доступ к сети со многими изображениями. Следует признать, что есть нечто большее, чем тестирование библиотеки. Мне нравится, например, как хорошо играет Volley с жизненным циклом Activity. Ни одна из других библиотек не делает этого.

Итак, все, что плывет на твоей лодке, действительно Я (Коуш) хочу залп с API Пикассо.

Из коробки Volley не включает собственную реализацию дискового кэша. Вам нужно взять DiskLruCache (или гибридный кэш-память или диск, если хотите) и заставить его реализовать интерфейс Volley ImageCache.

В этом сообщении блога подводится итог того, как реализовать дисковый кеш с помощью Volley для загрузки изображений: http://blogs.captechconsulting.com/blog/raymond-robinson/google-io-2013-volley-image-cache-tutorial.

Просто используйте Picasso библиотека:

Picasso.with(context).load(new File("/images/oprah_bees.gif")).into(imageView2);

Это позволит вам загрузить конкретные file от SD и вы можете передать imageView тоже, где вы можете установить это изображение.

Читать подробнее в библиотеке Пикассо

Volly также может быть использован для загрузки файлов на диск.

Использование:

networkImageView.setImageUrl(Uri.fromFile(newFile(filename)).toString(),mImageFetcher);
Другие вопросы по тегам