Ładowanie zdjęć z Androida-Volley vs Picasso

Szukam rozwiązania open source do ładowania/buforowania obrazów.

Szukam:

Google ' s Volley,

Square ' s Picasso

Universal Image Loader

Chcę być w stanie obsłużyć asynchroniczne ładowanie obrazu z dysku, jak również z sieci, jednak nie jestem pewien, czy uchwyt Google ' a ładuje się z dysku.

Czy Volley pozwala na wczytywanie zasobów z dysku??

Przykładem tego, co chciałbym zrobić jest dostępne z akwarium.

Author: Akarsh M, 2013-05-28

6 answers

Volley ' Request class zajmuje się wszystkimi żądaniami sieciowymi. Nie mogę znaleźć żadnego zasobu ładującego klasę z dysku..

 4
Author: Crossle Song,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-28 01:37:30

Jeśli nie masz nic przeciwko nowszemu / mniej stabilnemu oprogramowaniu, właśnie wydałem bibliotekę open source o nazwie Glide: https://github.com/bumptech/glide

Został zaprojektowany, aby umożliwić wydajne ładowanie dowolnego obrazu, do którego można uzyskać strumień wejściowy. Zawiera kilka podstawowych implementacji http / file loading, ale także pozwala na podłączenie własnej lub użycie jakiejś zewnętrznej biblioteki (np. Volley) poprzez wywołania zwrotne.

Obejmuje pamięć i buforowanie dysku, a także recykling bitmap na nowszych urządzeniach. Wszystko, co musisz zrobić, to zaimplementować interfejs, aby uzyskać strumień wejściowy dla modelu danych (ścieżka/url/uri itp.) i przekazać go wraz z dowolnymi transformacjami, symbolami zastępczymi lub animacjami do Singleton Glide.

Cieszę się, że mogę porozmawiać z Tobą lub z każdym, kto jest ciekawy, użyliśmy go szeroko w Bump do interfejsu z różnymi bibliotekami.

 25
Author: Sam Judd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-02 02:33:02

Zebrałem kilka ważnych informacji z http://blog.bignerdranch.com/3177-solving-the-android-image-loading-problem-volley-vs-picasso/ (porównanie starszych wersji 2.0 vs volley)

Picasso jest całkowicie skupiony na ładowaniu obrazów. W rezultacie, jeśli masz dziwactwa w procesie ładowania obrazu

Volley, z drugiej strony, jest całkowicie koncentruje się na obsłudze indywidualnych, małe żądania HTTP. Więc jeśli obsługa żądań HTTP ma jakieś dziwactwa, Volley pewnie ma dla Ciebie hak. Jeśli natomiast masz quirk w obsłudze obrazu, jedynym prawdziwym hakiem masz jest ImageCache. To nie jest nic, ale to też nie jest dużo.ale ma więcej innych zalet, takich jak po zdefiniowaniu żądań, korzystanie z nich z wnętrza fragmentu lub działania jest bezbolesne. I w przeciwieństwie do równoległych AsyncTasks

Picasso robi tylko jedną rzecz, podczas gdy Volley próbuje rozwiązać więcej Ogólny problem.

Android nie dobrze radzić sobie z obrazami o wysokiej rozdzielczości. Mam małą obsesja na punkcie wzoru łapania OutOfMemoryError w Androidzie aplikacje. Wydaje się to absurdalną taktyką, ale to jedyny sposób aby niezawodnie obsługiwać niektóre scenariusze obrazu w porównaniu do kłopotów z Picasso prawidłowo skaluje i dopasowuje duże obrazy. Picasso nie respektuj atrybut scaleType na swoich ImageViews(Nie wiem, czy jest fixed in latest ver).

Test Ex: znalazłem, że Volley łapie OutOfMemoryError podczas Ładowanie oryginalna rozdzielczość obrazu zamiast wersji miniaturki, porównując do wersji Picassa nie wybucha (łapie OutOfMemoryError też), ale picasso nie wczytuje żadnych obrazów, które są za duży. Nie tylko Volley nie wybucha, ale Volley wyświetla wszystkie te duże obrazy!!!.

Według hakera Androida Koushik Dutta:

Testowanie wszystkich obrazów Androida i bibliotek http

I ' ve been Testowanie i benchmarking kilka różnych obraz wczytywania i dostępnych bibliotek żądań http, ponieważ kilka z nich zostały wydane w zeszłym tygodniu.

Skład:

  • AndroidAsync + UrlImageViewHelper (koush)
  • Volley (Google)
  • okhttp + Picasso (kwadrat)

Wszystkie obsługują buforowane i warunkowo buforowane odpowiedzi, zachowaj przy życiu, itd.

Myśli:

    Picasso ma najładniejsze API obrazu. Jestem zamierzam ukraść ich styl currying API dla moich przyszłych / obecnych rzeczy. Picasso jest również zauważalnie najwolniejszy. Zwłaszcza na 3G vs wifi. Prawdopodobnie ze względu na ich Niestandardowy klient okhttp.
  • UrlImageViewHelper + AndroidAsync jest najszybszy. Zabawa z tymi dwoma wspaniałymi bibliotekami naprawdę podkreśliła, że API obrazu jest jednak dość przestarzałe.
  • Volley jest slick; naprawdę lubię ich pluggable backend transports, i może skończyć się upuszczeniem AndroidAsync tam. Priorytet żądania
    a zarządzanie odwołaniami jest świetne.

Update to nie są tak naprawdę biblioteki http. Tylko Ładowarki obrazów. ale tam były wnioski o porównanie w komentarzach... Android-Universal-Image-Loader jest najpopularniejszym obecnie. Wysoce konfigurowalny.

AQuery; jak jquery, ale dla Androida? Myślę, że to miłe, jeśli jesteś w takie rzeczy. Nie używaj jednak tego; to sra na interfejsie użytkownika nić czy coś. Ładowanie kilku zdjęć na moim Nexusie 4 w listview sprawiło, że wydawało się, że znowu byłem na moim HTC G1. Major jąkanie.

Testy z cache clear:

Cold to świeży start aplikacji. Warm jest Cache clear dzięki połączeniom http prawdopodobnie utrzymywany przy życiu.

W zależności od tego, co się dzieje, dane są przetwarzane w czasie rzeczywistym.]}

    / Picasso / / 12142 / / 11892]}
  • UrlImage 7378/4525
  • Volley 8292/7520
  • Android-Universal-Image-Loader 14484/11243
  • AQuery 11341/9637 (ten wydaje się zamykać wątek UI... nie używaj go)

Oto baza kodu testowego: https://github.com/koush/AndroidNetworkBench

Wniosek: te testy nie są jednoznaczne. Właśnie przetestowałem współbieżny dostęp do sieci z wieloma obrazami. Trzeba przyznać, że jest więcej za testowanie biblioteki. Lubię jak Volley gra ładnie z Na przykład cykl życia aktywności. Żadna z innych bibliotek tego nie robi.

Więc, cokolwiek naprawdę pływa Twoją łodzią. Ja (Koush) chcę z API Picassa.

 18
Author: LOG_TAG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-06 05:46:17

Out of the box Volley nie zawiera własnej implementacji pamięci podręcznej dysku. Musisz wziąć DiskLruCache (lub hybrid memory/disk cache, jeśli wolisz) i zaimplementować interfejs Volley ImageCache.

Ten wpis na blogu podsumowuje jak zaimplementować dyskową pamięć podręczną z Volley do ładowania obrazów: http://blogs.captechconsulting.com/blog/raymond-robinson/google-io-2013-volley-image-cache-tutorial.

 3
Author: rdrobinson3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-03 12:51:33

Po prostu użyj Picasso biblioteki:

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

To pozwoli Ci załadować specyficzne file z SD i możesz przekazać imageView również, gdzie możesz ustawić ten obraz.

To Read more feature into Picasso Library

 3
Author: taran mahal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-22 16:28:41

Volly może być również używany do ładowania plików na dysku.

Użycie:

networkImageView.setImageUrl(Uri.fromFile(newFile(filename)).toString(),mImageFetcher);
 0
Author: lokesh kalal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-31 11:05:04