Загрузка изображения для Android - Volley vs Picasso
Я ищу решение для загрузки / кэширования изображений с открытым исходным кодом.
Я ищу в:
Универсальный загрузчик изображений
Я хочу иметь возможность обрабатывать асинхронные загрузки изображений с диска, а также по сети, однако я не уверен, загружается ли залповый дескриптор Google с диска.
Разрешает ли Volley загрузку ресурсов с диска??
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);