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

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

Я ищу:

Google Volley,

Square Picasso

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

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

Волейбол разрешает загрузку ресурсов с диска?

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

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

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

Test Ex: я обнаружил, что Volley ловит OutOfMemoryError во время загрузки оригинальное разрешение изображения вместо миниатюрной версии, по сравнению с версией Пикассо не взорвется (он ловит OutOfMemoryError тоже), но picasso не загружает изображения, которые слишком большой. Воллей не только не взорвется, но и Volley отображает все эти большие изображения!!!.

Согласно Android Hacker Koushik Dutta:

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

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

Модельный ряд:

  • AndroidAsync + UrlImageViewHelper (koush)
  • Волейбол (Google)
  • okhttp + Picasso (Square)

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

Мысли:

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

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

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

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

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Кому Подробнее читайте в Picasso Library

Ответ 6

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

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

networkImageView.setImageUrl(Uri.fromFile(newFile(filename)).toString(),mImageFetcher);