Я хотів би поділитися своїм досвідом із цими 3 бібліотеками: UIL, Picasso та Volley. Раніше я використовував UIL, але тоді я прийшов до висновку, що не можу насправді рекомендувати його, і я б запропонував використовувати Volley або Picasso замість них, які розроблені дуже талановитими командами. UIL зовсім не поганий, але йому бракує уваги до деталей інших двох бібліотек.
Я виявив, що UIL є менш приємним із виконанням інтерфейсу; він, як правило, блокує потік інтерфейсу більше, ніж Волей або Пікассо. Частково це може бути пов’язано з тим, що UIL не підтримує пакетне реагування на зображення, тоді як Пікассо та Воллі роблять це за замовчуванням.
Крім того, мені не сподобалась система кешування диска UIL. Хоча ви можете вибирати між різними реалізаціями, мені потрібно зазначити, що на даний момент немає можливості обмежити кеш-пам’ять диска UIL як загальним розміром, так і часом закінчення сутності. Волей і Пікассо роблять це, і вони використовують час закінчення, повернутий сервером за замовчуванням, тоді як UIL ігнорує його.
Нарешті, UIL дозволяє встановити глобальну конфігурацію завантажувача зображень, яка включає обрані реалізації кеш-пам’яті диска та кешу пам’яті та налаштування та інші деталі, але ця конфігурація буде застосована скрізь у вашому додатку. Отже, якщо вам потрібна більша гнучкість, як два окремі дискові кеші, для UIL це не можна. Volley, з іншого боку, дозволяє вам мати скільки завгодно окремих завантажувачів зображень, кожен зі своєю конфігурацією. Пікассо за замовчуванням використовує глобальний екземпляр, але також дозволяє створювати окремо налаштовані екземпляри.
Підводячи підсумок: Пікассо має найкращий API, але він використовує глобальний кеш HTTP-диска, спільний між усіма HttpURLConnection
екземплярами, що в деяких випадках може бути занадто обмежувальним. Volley має найкращу продуктивність і модульність, але менш зручний для користувача і вимагатиме, щоб ви написали один або два власні модулі, щоб він працював так, як ви хочете. Загалом, я б рекомендував їх обох проти UIL.
Редагувати (18 грудня 2014 р.): З моменту написання цієї початкової відповіді все змінилося, і я відчув, що це потрібно вдосконалити:
Picasso 2.4 є навіть більш налаштованим, ніж попередні версії, і при використанні з OkHttp (що настійно рекомендується) він також може використовувати окремий кеш диска для кожного екземпляра, тому насправді немає обмежень у тому, що ви можете зробити. Що ще важливіше, я помітив, що продуктивність Picasso та OkHttp значно покращилася, і, на мій погляд, це зараз найшвидше рішення для завантаження зображень для Android. Зверніть увагу, що в моєму коді я завжди використовую .fit()
в поєднанні з .centerCrop()
або .centerInside()
для зменшення використання пам'яті та уникнення зміни розмірів растрових зображень в потоці інтерфейсу користувача. Пікассо активно розробляється і підтримується, і це, безумовно, великий плюс.
Волей не змінився так сильно, але я тим часом помітив дві проблеми з ним:
- Іноді під великим навантаженням деякі зображення більше не завантажуються через пошкодження кешу диска.
- Ескізи, що відображаються в NetworkImageView (із типом масштабу, встановленим на centerCrop), досить розмиті в порівнянні з тим, що ви отримуєте в інших бібліотеках.
З цих причин я вирішив припинити користуватися Volley.
UIL все ще працює повільно (особливо кеш диска), і його API має тенденцію змінюватися досить часто.
Я також протестував цю нову бібліотеку під назвою Glide 3, яка стверджує, що вона оптимізована більше, ніж Пікассо з API, подібним до Пікассо. Згідно з моїм особистим досвідом, це насправді повільніше, ніж Пікассо та Волей, під час мережевих запитів під великим навантаженням, навіть коли використовується в поєднанні з OkHttp. Гірше, це призвело до декількох збоїв у роботі моїх програм під льодяником, коли виходили з активності. Він все ще має 2 переваги перед конкурентами:
- Він підтримує декодування анімованих GIF-файлів
- Це поміщає остаточні зменшені растрові зображення в кеш-пам’ять диска, що означає надзвичайне швидке читання з дискового кешу.
Висновок: Зараз я рекомендую використовувати Picasso + OkHttp, оскільки він забезпечує найкращу гнучкість, API, продуктивність та стабільність у поєднанні. Якщо вам потрібна підтримка GIF, ви також можете розглянути Glide.