Я хотел бы поделиться своим опытом работы с этими 3 библиотеками: UIL, Picasso и Volley. Раньше я использовал UIL, но затем пришел к выводу, что не могу его рекомендовать, и я бы предложил вместо этого использовать Volley или Picasso, которые разработаны талантливыми командами. UIL совсем неплох, но ему не хватает внимания к деталям двух других библиотек.
Я обнаружил, что UIL менее хорош с производительностью пользовательского интерфейса; он имеет тенденцию блокировать поток пользовательского интерфейса больше, чем Volley или Picasso. Частично это может быть связано с тем, что UIL не поддерживает пакетирование ответов с изображениями, в то время как Пикассо и Воллей делают это по умолчанию.
Также мне не понравилась система дискового кеширования UIL. Хотя вы можете выбирать между различными реализациями, я должен указать, что на данный момент нет способа ограничить дисковый кеш UIL как по общему размеру, так и по времени истечения срока действия объекта. Volley и Picasso делают это, и они используют время истечения срока, возвращаемое сервером по умолчанию, в то время как UIL игнорирует его.
Наконец, UIL позволяет вам установить глобальную конфигурацию загрузчика изображений, которая включает в себя выбранный дисковый кеш и реализации и настройки кэша памяти, а также другие детали, но эта конфигурация будет применяться повсюду в вашем приложении. Так что, если вам нужна большая гибкость, например, два отдельных дисковых кэша, UIL не подходит. Volley, с другой стороны, позволяет вам иметь столько отдельных загрузчиков изображений, сколько вы хотите, каждый со своей конфигурацией. Picasso по умолчанию использует глобальный экземпляр, но также позволяет создавать отдельно настраиваемые экземпляры.
Подводя итог: Picasso имеет лучший API, но он использует глобальный дисковый кеш HTTP, общий для всех HttpURLConnection
экземпляров, что в некоторых случаях может быть слишком ограничительным. Volley имеет лучшую производительность и модульность, но менее удобен для пользователя и потребует написания одного или двух собственных модулей, чтобы он работал так, как вы хотите. В целом я бы рекомендовал их обоих против UIL.
Изменить (18 декабря 2014 г.): все изменилось с тех пор, как я написал этот первоначальный ответ, и я почувствовал, что необходимо его улучшить:
Picasso 2.4 даже более настраиваемый, чем более старые версии, и при использовании с OkHttp (что настоятельно рекомендуется) он также может использовать отдельный дисковый кеш для каждого экземпляра, поэтому на самом деле нет никаких ограничений в том, что вы можете делать. Что еще более важно, я заметил, что производительность Picasso и OkHttp значительно улучшилась, и, на мой взгляд, теперь это самый быстрый загрузчик изображений для Android. Обратите внимание, что в моем коде я всегда использую .fit()
в сочетании с .centerCrop()
или .centerInside()
для уменьшения использования памяти и избегаю изменения размера растрового изображения в потоке пользовательского интерфейса. Picasso активно развивается и поддерживается, и это, безусловно, большой плюс.
Volley не сильно изменился, но я заметил две проблемы с ним:
- Иногда при большой нагрузке некоторые изображения больше не загружаются из-за повреждения кеша диска.
- Миниатюры, отображаемые в NetworkImageView (с типом масштаба, установленным на centerCrop), довольно размыты по сравнению с тем, что вы получаете с другими библиотеками.
По этим причинам я решил отказаться от использования Volley.
UIL по-прежнему медленный (особенно дисковый кеш), и его API имеет тенденцию меняться довольно часто.
Я также протестировал эту новую библиотеку под названием Glide 3, которая утверждает, что она более оптимизирована, чем Picasso, с API-интерфейсом, подобным Picasso. По моему личному опыту, он на самом деле медленнее, чем Picasso и Volley, во время сетевых запросов при большой нагрузке, даже когда используется в сочетании с OkHttp. Хуже того, это вызвало несколько сбоев в моих приложениях под Lollipop при выходе из активности. У него по-прежнему есть 2 преимущества перед конкурентами:
- Он поддерживает декодирование анимированных GIF-файлов.
- Он помещает окончательные уменьшенные растровые изображения в дисковый кеш, что означает, что чтение из дискового кеша происходит очень быстро.
Заключение: теперь я рекомендую использовать Picasso + OkHttp, потому что он обеспечивает лучшую гибкость, API, производительность и стабильность в сочетании. Если вам нужна поддержка GIF, вы также можете рассмотреть Glide.