Chciałbym podzielić się swoim doświadczeniem z tymi 3 bibliotekami: UIL, Picasso i Volley. Wcześniej korzystałem z UIL, ale potem doszedłem do wniosku, że naprawdę nie mogę go polecić i sugerowałbym zamiast tego użyć Volley lub Picasso, które są opracowane przez bardzo utalentowane zespoły. UIL nie jest wcale zły, ale brakuje mu dbałości o szczegóły, jak w pozostałych dwóch bibliotekach.
Zauważyłem, że UIL jest mniej przyjemny z wydajnością interfejsu użytkownika; ma tendencję do blokowania wątku interfejsu użytkownika bardziej niż Volley czy Picasso. Może to częściowo wynikać z faktu, że UIL nie obsługuje grupowania odpowiedzi obrazu, podczas gdy Picasso i Volley robią to domyślnie.
Ponadto nie podobał mi się system pamięci podręcznej dysku UIL. Chociaż można wybierać między różnymi implementacjami, muszę zwrócić uwagę, że w tej chwili nie ma możliwości ograniczenia pamięci podręcznej dysku UIL zarówno pod względem całkowitego rozmiaru, jak i czasu wygaśnięcia jednostki. Volley i Picasso robią to i domyślnie używają czasu wygaśnięcia zwróconego przez serwer, podczas gdy UIL go ignoruje.
Wreszcie, UIL umożliwia ustawienie globalnej konfiguracji programu ładującego obrazy, która obejmuje wybrane implementacje i ustawienia pamięci podręcznej dysku i pamięci podręcznej oraz inne szczegóły, ale ta konfiguracja zostanie zastosowana wszędzie w Twojej aplikacji. Jeśli więc potrzebujesz większej elastyczności, takiej jak dwie oddzielne dyskowe pamięci podręczne, UIL nie ma możliwości. Z drugiej strony Volley pozwala na posiadanie dowolnej liczby oddzielnych programów ładujących obrazy, z których każdy ma własną konfigurację. Picasso domyślnie używa instancji globalnej, ale umożliwia także tworzenie oddzielnie konfigurowalnych instancji.
Podsumowując: Picasso ma najlepsze API, ale używa globalnej pamięci podręcznej HTTP współużytkowanej przez wszystkie HttpURLConnection
instancje, co w niektórych przypadkach może być zbyt restrykcyjne. Volley ma najlepszą wydajność i modułowość, ale jest mniej przyjazny dla użytkownika i będzie wymagał napisania własnego modułu lub dwóch, aby działał tak, jak chcesz. Ogólnie poleciłbym ich obu przeciwko UIL.
Edycja (18 grudnia 2014 r.): Rzeczy się zmieniły, odkąd napisałem tę wstępną odpowiedź i uznałem, że konieczne jest jej ulepszenie:
Picasso 2.4 jest jeszcze bardziej konfigurowalny niż starsze wersje, a gdy jest używany z OkHttp (co jest wysoce zalecane), może również używać oddzielnej pamięci podręcznej dysku dla każdej instancji, więc naprawdę nie ma ograniczeń co do tego, co możesz zrobić. Co ważniejsze, zauważyłem, że wydajność Picassa i OkHttp znacznie się poprawiła i moim zdaniem jest to teraz najszybsze rozwiązanie do ładowania obrazów dla Androida, kropka. Należy pamiętać, że w moim kodzie zawsze używam .fit()
w połączeniu z .centerCrop()
lub w .centerInside()
celu zmniejszenia zużycia pamięci i unikam zmiany rozmiaru bitmapy w wątku interfejsu użytkownika. Picasso jest aktywnie rozwijany i wspierany, co z pewnością jest dużym plusem.
Volley nie zmienił się tak bardzo, ale w międzyczasie zauważyłem dwa problemy:
- Czasami przy dużym obciążeniu niektóre obrazy nie są już ładowane z powodu uszkodzenia pamięci podręcznej dysku.
- Miniatury wyświetlane w NetworkImageView (z typem skali ustawionym na centerCrop) są dość rozmyte w porównaniu z tym, co otrzymujesz w innych bibliotekach.
Z tych powodów zdecydowałem się przestać używać Volley.
UIL jest nadal powolny (szczególnie pamięć podręczna dysku), a jego interfejs API ma tendencję do częstych zmian.
Przetestowałem także tę nową bibliotekę o nazwie Glide 3, która twierdzi, że jest bardziej zoptymalizowana niż Picasso z interfejsem API podobnym do Picassa. Z mojego osobistego doświadczenia wynika, że jest wolniejszy niż Picasso i Volley podczas żądań sieciowych pod dużym obciążeniem, nawet w połączeniu z OkHttp. Co gorsza, spowodowało to kilka awarii moich aplikacji pod Lollipopem podczas opuszczania aktywności. Nadal ma 2 zalety w stosunku do swoich konkurentów:
- Obsługuje dekodowanie animowanych plików GIF
- Umieszcza ostateczne, zmniejszone mapy bitowe w pamięci podręcznej dysku, co oznacza, że odczyt z pamięci podręcznej dysku jest niezwykle szybki.
Wniosek: teraz zalecam używanie Picasso + OkHttp, ponieważ zapewnia to najlepszą elastyczność, interfejs API, wydajność i stabilność. Jeśli potrzebujesz obsługi formatu GIF, możesz również rozważyć Glide.