Porównanie bibliotek sieciowych Androida: OkHTTP, Retrofit i Volley [zamknięte]

579

Dwuczęściowe pytanie od programisty iOS uczącego się Androida, pracującego nad projektem Android, który będzie składał różne żądania od JSON do obrazu do strumieniowego pobierania audio i wideo:

  1. Na iOS intensywnie korzystałem z projektu AFNetworking . Czy istnieje odpowiednik biblioteki dla systemu Android?

  2. Przeczytałem o OkHTTP i Retrofit by Square, a także Volley, ale nie mam jeszcze doświadczenia w rozwijaniu z nimi. Mam nadzieję, że ktoś może podać konkretne przykłady najlepszych przypadków użycia dla każdego z nich. Z tego, co przeczytałem, wydaje się, że OkHTTP jest najsolidniejszym z trzech i może sprostać wymaganiom tego projektu (wspomnianym powyżej).

Alfie Hanssen
źródło
3
Jeśli korzystasz z wewnętrznej implementacji HttpUrlConnection, powinieneś wziąć pod uwagę, że HttpUrlConnection używa cichych ponownych prób na żądanie POST. To spowodowało dla mnie wiele szkód. Aby uzyskać więcej informacji, przeczytaj tutaj: stackoverflow.com/a/37675253/2061089
oli
1
jeśli ktoś potrzebuje listy wszystkich bibliotek sieciowych, możesz ją znaleźć na moim blogu androidredman.wordpress.com/2017/06/26/…
Manohar Reddy
Volley może uruchamiać starsze Apache, HttpUrlConnection, Apache-4 lub OkHttp. Gdzie są modernizacje, tak naprawdę działa tylko OkHttp. Modernizacja jest znacznie łatwiejsza do skonfigurowania.
bitsabhi,

Odpowiedzi:

647

Mam nadzieję, że ktoś poda konkretne przykłady najlepszych przypadków użycia dla każdego z nich.

Użyj opcji Modernizuj, jeśli komunikujesz się z usługą internetową. Jeśli pobierasz obrazy, użyj biblioteki Picasso. Użyj OkHTTP, jeśli chcesz wykonywać operacje HTTP, które leżą poza Retrofit / Picasso.

Volley z grubsza konkuruje z Retrofit + Picasso. Na plus to jedna biblioteka. Z drugiej strony jest to jedna nieudokumentowana, nieobsługiwana biblioteka „rzuć kod na ścianę i zrób na nim prezentację I | O”.

EDYCJA - Volley jest teraz oficjalnie obsługiwany przez Google. Prosimy zapoznać się z Przewodnikiem dla programistów Google

Z tego, co przeczytałem, wydaje się, że OkHTTP jest najbardziej niezawodnym z 3

Modernizacja używa OkHTTP automatycznie, jeśli jest dostępna. Istnieje Jist Wharton, który łączy Volleya z OkHTTP.

i może obsłużyć wymagania tego projektu (wspomniane powyżej).

Prawdopodobnie nie użyjesz żadnego z nich do „strumieniowego pobierania plików audio i wideo”, zgodnie z konwencjonalną definicją „strumieniowania”. Zamiast tego platforma multimediów systemu Android obsłuży te żądania HTTP.

Biorąc to pod uwagę, jeśli zamierzasz wykonać własne strumieniowanie oparte na HTTP, OkHTTP powinien obsłużyć ten scenariusz; Nie pamiętam, jak dobrze Volley poradziłaby sobie z tym scenariuszem. Ani Modernizacja, ani Picasso nie są do tego przeznaczone.

CommonsWare
źródło
4
Dzięki @CommonsWare za zwięzłą odpowiedź i notatkę o nieudokumentowanym skrócie Volleya (odniosło to wrażenie, szczególnie w porównaniu do innych projektów). Zdecydowanie pomaga mi oderwać się od ziemi.
Alfie Hanssen
18
Kolejna świetna odpowiedź od @CommonsWare. Czy ktoś może sprawdzić, jak RoboSpice pasuje do tego wszystkiego?
user1923613
3
@ user1923613 github.com/octo-online/robospice, jeśli używasz siatkówki do połączeń sieciowych, to nie musisz używać robospice !, siatkówka robi wiele rzeczy, które Robospice robi dla połączeń sieciowych, Robospice obsługuje REST od razu po wyjęciu z pudełka (używając Spring Android, Google Http Client or Retrofit). Jeśli chcesz szybko połączyć się w sieć i ładować za pomocą solidnego klienta sieciowego, możesz przejść do siatkówki! ale możesz zastąpić normalne zadanie asynchroniczne Androida, którego używasz Robospice, aby uzyskać lepszą wydajność i uniknąć wycieków pamięci!
LOG_TAG
4
@frostymarvelous: Uważam, że nieudokumentowane i nieobsługiwane jest więcej niż wystarczającym uzasadnieniem. To nie tak, że Google nie ma systemu bardziej formalnie obsługującego takie rzeczy (np. Biblioteka obsługi Androida). W ciągu dwóch lat od tej odpowiedzi, na plus, istnieje wsparcie społeczności, w tym niektóre nieoficjalne pakowanie kodu w artefakt.
CommonsWare
4
@AbhinavVutukuri: Komentujesz odpowiedź sprzed ponad dwóch lat. W tym czasie nie było dokumentacji.
CommonsWare
361

Patrząc na perspektywę siatkówki, oto kilka zalet twojego wymagania:

Z jednej strony Volley jest całkowicie skoncentrowany na obsłudze indywidualnych, małych żądań HTTP. Jeśli więc obsługa żądań HTTP ma pewne dziwactwa, Volley prawdopodobnie ma dla ciebie haczyk. Z drugiej strony, jeśli masz dziwne podejście do przetwarzania obrazu, jedynym prawdziwym haczykiem jest ImageCache . „To nie jest nic, ale też nie jest wiele !,” ale ma więcej innych zalet, takich jak zdefiniowanie żądań, użycie ich z fragmentu lub działania jest bezbolesne, w przeciwieństwie do równoległych zadań AsyncTasks

Plusy i minusy Volley:

Co jest miłego w Volley?

  • Część sieci to nie tylko obrazy. Siatkówka ma być integralną częścią zaplecza. Dla świeżego projektu opartego na prostej usłudze REST może to być duża wygrana.

  • NetworkImageView jest bardziej agresywny w kwestii czyszczenia żądań niż Picasso i bardziej konserwatywny w zakresie wzorców użycia GC. NetworkImageView opiera się wyłącznie na silnych odwołaniach do pamięci i czyści wszystkie dane żądań, gdy tylko nowe żądanie zostanie utworzone dla ImageView lub gdy tylko ImageView zniknie z ekranu.

  • Wydajność. Ten post nie oceni tego roszczenia, ale najwyraźniej dołożyli starań, aby zachować rozsądek w zakresie wzorców wykorzystania pamięci. Volley stara się również grupować wywołania zwrotne do głównego wątku, aby zmniejszyć przełączanie kontekstu.

  • Najwyraźniej Volley też ma przyszłość. Sprawdź RequestFuture, jeśli jesteś zainteresowany.

  • Jeśli masz do czynienia ze skompresowanymi obrazami w wysokiej rozdzielczości, Volley jest jedynym rozwiązaniem, które działa dobrze.

  • Siatkówki można używać z Okhttp (nowa wersja Okhttp obsługuje NIO dla lepszej wydajności)

  • Volley gra dobrze z cyklem życia Activity.

Problemy z Volley:
Ponieważ Volley jest nowy, niewiele rzeczy nie jest jeszcze obsługiwanych, ale zostało naprawione.

  1. Wnioski wieloczęściowe (rozwiązanie: https://github.com/vinaysshenoy/enhanced-volley )

  2. kod stanu 201 jest traktowany jako błąd, kod statusu od 200 do 207 jest teraz udaną odpowiedzią. (Naprawiono: https://github.com/Vinayrraj/CustomVolley )

    Aktualizacja: w najnowszej wersji Google volley błąd kodów statusu 2XX został naprawiony ! Dzięki Ficus Kirkpatrick!

  3. jest mniej udokumentowany, ale wiele osób wspiera siatkówkę w github, dokumentację podobną do java można znaleźć tutaj . W witrynie dla programistów Androida możesz znaleźć przewodnik dotyczący przesyłania danych sieciowych za pomocą Volley . Kod źródłowy siatkówki można znaleźć w Google Git

  4. Aby rozwiązać / zmienić Politykę przekierowań Volley Framework, użyj Volley z OkHTTP (CommonsWare wspomniane powyżej)

Możesz także przeczytać ładowanie tego obrazu Porównywanie salwy za pomocą Picassa

Modernizacja:

Jest wydany przez Square , oferuje bardzo łatwy w użyciu interfejs API REST (aktualizacja: Voila! Z obsługą NIO)

Zalety modernizacji:

  • W porównaniu do Volley, kod REST API Retrofit jest krótki i zapewnia doskonałą dokumentację API i ma dobre wsparcie w społecznościach! Bardzo łatwo jest dodać do projektów.

  • Możemy go używać z dowolną biblioteką serializacji, z obsługą błędów.

Aktualizacja: - Istnieje wiele bardzo dobrych zmian w Retrofit 2.0.0-beta2

  • Wersja 1.6 Retrofit z OkHttp 2.0 jest teraz zależny od Okio do wsparcia java.io i java.nio co sprawia, że znacznie łatwiej dostępu, przechowywania i przetwarzania danych z wykorzystaniem ByteString i bufor zrobić kilka sprytnych rzeczy, aby zaoszczędzić CPU i pamięci. (FYI: To przypomina mi bibliotekę OIN Kousha z obsługą NIO!) Możemy użyć Retrofit razem z RxJava do łączenia i łączenia wywołań REST za pomocą rxObservables, aby uniknąć brzydkich łańcuchów oddzwaniania (aby uniknąć piekła zwrotnego !!) .

Minusy modernizacji dla wersji 1.6:

  • Obsługa błędów związanych z pamięcią nie jest dobra (w starszych wersjach Retrofit / OkHttp) nie jestem pewien, czy została poprawiona dzięki Okio z obsługą Java NIO.

  • Minimalna pomoc w wątkach może spowodować oddzwonienie, jeśli użyjemy tego w niewłaściwy sposób.

(Wszystkie powyższe minusy zostały rozwiązane w nowej wersji Retrofit 2.0 beta)

================================================== ======================

Aktualizacja:

Android Async vs Volley vs. Retrofit wydajności (milisekundy, im niższa wartość, tym lepiej):

Testy wydajności Android Async vs Volley vs Retrofit

(FYI powyżej informacji o testach modernizacyjnych poprawi się dzięki obsłudze JIO NIO, ponieważ nowa wersja OKhttp jest zależna od biblioteki NIO Okio)

We wszystkich trzech testach z różnymi powtórzeniami (1–25 razy) Volley był gdziekolwiek od 50% do 75% szybszy. Modernizacja zarejestrowała się imponująco od 50% do 90% szybciej niż AsyncTasks, uderzając w ten sam punkt końcowy tyle samo razy. W pakiecie testowym Dashboard przełożyło się to na ładowanie / parsowanie danych o kilka sekund szybciej. To ogromna różnica w świecie rzeczywistym. Aby testy były sprawiedliwe, czasy AsyncTasks / Volley obejmowały analizę JSON, ponieważ Retrofit robi to automatycznie.

RetroFit wygrywa w teście porównawczym!

Ostatecznie zdecydowaliśmy się na Retrofit dla naszej aplikacji. Jest nie tylko absurdalnie szybki, ale dość dobrze wpasowuje się w naszą istniejącą architekturę. Byliśmy w stanie stworzyć nadrzędny interfejs zwrotny, który automatycznie wykonuje obsługę błędów, buforowanie i paginację bez żadnego wysiłku dla naszych interfejsów API. Aby połączyć się z Retrofit, musieliśmy zmienić nazwę naszych zmiennych, aby nasze modele były zgodne z GSON, napisać kilka prostych interfejsów, usunąć funkcje ze starego API i zmodyfikować nasze fragmenty, aby nie używać AsyncTasks. Teraz, gdy kilka fragmentów zostało całkowicie przetworzonych, jest to całkiem bezbolesne. Były pewne rosnące problemy i problemy, które musieliśmy przezwyciężyć, ale ogólnie poszło gładko. Na początku natrafiliśmy na kilka problemów technicznych / błędów, ale Square ma fantastyczną społeczność Google+, która była w stanie nam pomóc.

Kiedy stosować Volley ?!

Możemy użyć Volley, gdy musimy załadować obrazy, a także zużywać interfejsy API REST !, system kolejkowania połączeń sieciowych jest potrzebny dla wielu żądań n / w jednocześnie! również Volley ma lepszą obsługę błędów związanych z pamięcią niż Retrofit!

OkHttp może być używany z Volley, Retrofit domyślnie używa OkHttp ! Obsługuje SPDY , pule połączeń, buforowanie dysku, przezroczysta kompresja! Ostatnio ma pewne wsparcie dla java NIO z Okio biblioteką .

Źródło, źródło: volley-vs-retrofit autorstwa pana Josha Ruescha

Uwaga: w przypadku przesyłania strumieniowego zależy to od rodzaju przesyłania strumieniowego, takiego jak RTSP / RTCP.

LOG_TAG
źródło
@ Jan1337z +1 dla informacji! Zaktualizowałem to! android.googlesource.com/platform/frameworks/volley
LOG_TAG
4
@LOG_TAG interesujące byłoby przetestowanie RoboSpice w swojej próbce. Oferujemy nawet moduł modernizacji, więc uważam, że wymagałoby to bardzo niewielkich zmian. Czy źródło jest gdzieś dostępne? Zaletą RS jest to, że właściwie obsługuje cykl życia działania, które wykonuje żądania sieciowe, a także zapewniamy przezroczyste buforowanie, myślę, że narzut byłby niewielki w porównaniu do samego żądania modernizacji.
Snicolas
@Snicolas Otrzymałem wyniki testu przez bloga Josh Ruesch , możesz zobaczyć konwersję między Ficusem Kirkpatrickiem (założycielem Volley), Joshem Rueschem! Nigdzie jeszcze nie udostępnił projektu testu porównawczego! Do Twojej wiadomości Właśnie zacząłem uczyć się RoboSpice z próbką modernizacji w obliczu tego problemu z powiadomieniem :)
LOG_TAG 24.04.2014
3
Cześć! Jeśli chodzi o żądania wieloczęściowe z Volley, myślę, że możemy z nim korzystać MultipartEntityBuilderw httpmimebibliotece.
BNK,
2
Czy ktoś jeszcze zweryfikował te testy? Ponieważ biblioteka HTTP Apache jest przestarzała w M (i używałem jej do budowania wieloczęściowego), zdecydowałem się na migrację mojego kodu sieciowego do Retrofit. Początkowo zmieniłem jedno z wywołań GET, aby uzyskać kilka obiektów z serwera. Zmierzyłem czas Retrofit vs AsyncTask (z własnym parsowaniem JSON). Wydajność była bardzo bliska, a nie 3-krotna poprawa, jak pokazano w kolumnie „Jedna dyskusja” tabeli. To prawda, że ​​wynikowy kod jest znacznie czystszy i nie musiałem pisać własnego parsera JSON, ale dla pojedynczego żądania GET nie było poprawy.
Gary Kipnis,
44

RoboSpice vs. Salwa

Od https://groups.google.com/forum/#!topic/robospice/QwVCfY_glOQ

  • RoboSpice (RS) jest oparty na usługach i bardziej szanuje filozofię Androida niż Volley. Siatkówka jest oparta na wątkach i nie jest to sposób, w jaki przetwarzanie w tle powinno odbywać się na Androidzie. Ostatecznie możesz wykopać obie biblioteki lib i stwierdzić, że są całkiem podobne, ale nasz sposób przetwarzania w tle jest bardziej zorientowany na Androida, pozwala nam na przykład powiedzieć użytkownikom, że RS faktycznie robi coś w tle, co byłoby trudne do gry w siatkówkę (w rzeczywistości wcale tak nie jest).
  • Zarówno RoboSpice, jak i siatkówka oferują ciekawe funkcje, takie jak ustalanie priorytetów, ponawianie zasad, anulowanie żądań. Ale RS oferuje więcej: bardziej zaawansowane buforowanie i to jest duże, z zarządzaniem pamięcią podręczną, agregacją żądań, innymi funkcjami, takimi jak odpowiadanie na oczekujące żądanie, zajmowanie się wygaśnięciem pamięci podręcznej bez polegania na nagłówkach serwera itp.
  • RoboSpice robi więcej poza wątkiem interfejsu użytkownika: siatkówka deserializuje twoje POJO w głównym wątku, co jest okropne dla mnie. Dzięki RS Twoja aplikacja będzie bardziej responsywna.
  • Jeśli chodzi o szybkość, zdecydowanie potrzebujemy wskaźników. RS stało się teraz bardzo szybkie, ale wciąż nie mamy tu co do tego mówić. Siatkówka powinna teoretycznie być nieco szybsza, ale RS jest teraz masowo równoległy ... kto wie?
  • RoboSpice oferuje duży zakres kompatybilności z rozszerzeniami. Możesz go używać z okhttp, retrofit lub ormlite (beta), jackson, jackson2, gson, xml serializer, klientem google http, wiosną Androida ... Całkiem sporo. Siatkówki można używać z ok http i używa gson. Otóż ​​to.
  • Volley oferuje więcej cukru z interfejsu użytkownika niż RS. Volley zapewnia NetworkImageView, RS zapewnia adapter spicelist. Pod względem funkcji nie jest to jak dotąd, ale uważam, że Volley jest bardziej zaawansowany w tym temacie.
  • Od czasu pierwszej wersji RoboSpice rozwiązano ponad 200 błędów. Jest dość solidny i intensywnie wykorzystywany w produkcji. Siatkówka jest mniej dojrzała, ale jej baza użytkowników powinna szybko rosnąć (efekt Google).
  • RoboSpice jest dostępny w maven central. Trudno znaleźć siatkówkę;)
Snicolas
źródło
Robospice korzysta z usług Androida do połączeń REST, czy możemy korzystać z Robospice z Retrofit, aby zminimalizować wysiłki związane z parsowaniem gsonów, w ten sam sposób, w jaki możemy korzystać z Volleya (opartego na bieżniku) z Robospice? (Nie jestem pewien, czy to właściwe pytanie QSN) Po prostu szukam salwy z obsługą!
LOG_TAG
1
Siatkówka z obsługą jest w zasadzie RS. Lub, chronologicznie rzecz biorąc, Volley jest RS bez serwisu i brakuje kilku innych funkcji. I tak, możesz używać Retrofit z RS, a nawet dodać okhttp, jeśli chcesz.
Snicolas,
7
Dlaczego trudno znaleźć siatkówkę? compile 'com.mcxiaoke.volley:library:1.0.+'
Rob
1
@Rob był czas, kiedy klon mcxiaoke był niedostępny. Trzeba było ręcznie uwzględnić siatkówkę w aplikacji.
frostymarvelous
„siatkówka deserializuje Twoje POJO w głównym wątku”. Jeśli jest to problem, możesz odebrać zwrócone dane JSON i przekształcić je z osobna w osobny wątek.
AndroidDev,
20

AFNetworking dla Androida:

Szybka sieć Android jest tutaj

Szybka biblioteka sieciowa Android obsługuje wszystkie typy żądań HTTP / HTTPS, takie jak GET, POST, DELETE, HEAD, PUT, PATCH

Szybka biblioteka sieciowa Android obsługuje pobieranie dowolnego rodzaju plików

Szybka biblioteka sieciowa Android obsługuje przesyłanie dowolnego rodzaju plików (obsługuje przesyłanie wieloczęściowe)

Szybka biblioteka sieciowa Android obsługuje anulowanie żądania

Szybka biblioteka sieciowa Android obsługuje ustawianie priorytetu dla każdego żądania (NISKI, ŚREDNI, WYSOKI, NATYCHMIAST)

Szybka biblioteka sieciowa Android obsługuje RxJava

Ponieważ wykorzystuje OkHttp jako warstwę sieciową, obsługuje:

Szybka biblioteka sieciowa Android obsługuje obsługę HTTP / 2, dzięki czemu wszystkie żądania do tego samego hosta współużytkują gniazdo

Szybka biblioteka sieciowa Androida korzysta z puli połączeń, co zmniejsza opóźnienie żądań (jeśli HTTP / 2 nie jest dostępne)

Przezroczysty GZIP zmniejsza rozmiary pobierania

Szybka biblioteka sieciowa Android obsługuje buforowanie odpowiedzi, co całkowicie eliminuje sieć przy powtarzaniu żądań

Dzięki: Biblioteka jest tworzona przeze mnie

Amit Shekhar
źródło
1
Stwierdzasz, że twoja biblioteka obsługuje HTTP / 2, ale nie mówisz, czy istnieje wymaganie API do obsługi HTTP / 2. Rozumiałem, że poziom interfejsu API Androida mniejszy niż 5.0 nie miał odpowiednich metod szyfrowania SSL do obsługi HTTP / 2. Nie pukanie, po prostu próba pełnej oceny proponowanego rozwiązania.
DoctorD
@AmitShekhar: Chciałem tylko wiedzieć, który z nich jest najlepszy do wywoływania API w Androidzie. Korzystam z Biblioteki sieci Android, więc który z nich jest świetny do wdrożenia Retrofit, Volley lub Android Networking?
Parth Bhayani
@Amit Shekhar Jak wydajna jest szybka sieć Android na przesyłanie obrazów wieloczęściowych, szczególnie jeśli chodzi o scenariusze z niskim dostępem do Internetu?
user3135923,
18

Asynchroniczny klient HTTP loopj vs. Volley

Specyfiką mojego projektu są małe żądania HTTP REST, co 1-5 minut.

Używam asynchronicznego klienta HTTP (1.4.1) przez długi czas. Wydajność jest lepsza niż użycie waniliowego serwera Apache httpClient lub połączenia HTTP URL. W każdym razie nowa wersja biblioteki nie działa dla mnie: wyjątek między bibliotekami przeciął łańcuch wywołań zwrotnych.

Przeczytanie wszystkich odpowiedzi zmotywowało mnie do spróbowania czegoś nowego. Wybrałem bibliotekę Volley HTTP.

Po pewnym okresie użytkowania, nawet bez testów, widzę wyraźnie, że czas reakcji spadł do 1,5x, 2x Volley.

Może Retrofit jest lepszy niż asynchroniczny klient HTTP? Muszę tego spróbować. Ale jestem pewien, że Volley nie jest dla mnie.

Sergey Vakulenko
źródło
Jakakolwiek analiza dotycząca Retrofit Vs AsyncHttpClient ??? Proszę pisać, jeśli tak @Sergey
IshRoid
Używam AsyncHttpClient od kilku lat. Złe jest to, że repozytorium github trwa 2 lata bez zatwierdzenia.
Vitor Hugo Schwaab,
To już nie jest tak naprawdę, asynchroniczny http to zbyt stara moda. Rozważ zmianę na inną bibliotekę. Siatkówka stała się również bardzo dobrym wyborem.
Sergey Vakulenko
Sergey, @IshRoid Wciąż szukam odpowiedzi na twoje pytanie. Korzystam z AsyncHttpClient. Czy powinienem użyć czegoś innego, jak RxJava Retrofit lub coś innego ... Daj mi znać ... z niecierpliwością czekam na odpowiedź
Deep Dave
11

Aby dodać trochę do dyskusji z mojego doświadczenia w pracy z Volley:

  1. Volley nie obsługuje przesyłania strumieniowego ani pobierania w żadnym sensie. Oznacza to, że całe ciało żądania musi znajdować się w pamięci i nie można użyć polecenia an OutputStreamdo zapisania treści żądania do gniazda, ani też nie można użyć polecenia InputStreamdo odczytu treści odpowiedzi, tak jak HttpURLConnectionrobi to podstawowo . Tak więc Volley jest kiepskim wyborem do przesyłania lub pobierania dużych plików. Twoje prośby i odpowiedzi powinny być małe. To jedno z największych ograniczeń Volleya, jakie osobiście spotkałem. Za to, co jest warte, OkHttp ma interfejsy do pracy ze strumieniami.

  2. Brak oficjalnej dokumentacji jest denerwujący, chociaż udało mi się to obejść, czytając kod źródłowy, co jest dość łatwe do naśladowania. Bardziej kłopotliwe jest to, że o ile mogę stwierdzić, Volley nie ma oficjalnych wersji i nie ma artefaktu Maven ani Gradle, a zatem zarządzanie tym uzależnieniem staje się bardziej bolesne niż, powiedzmy, żadna z bibliotek Square . Po prostu klonujesz repozytorium, budujesz słoik i jesteś sam. Szukasz poprawki błędu? Pobierz i miej nadzieję, że tam jest. Możesz też dostać inne rzeczy; nie będzie to udokumentowane. Moim zdaniem oznacza to, że Volley jest nieobsługiwaną biblioteką strony trzeciej, mimo że baza kodu jest dość aktywna. Zastrzegający emptor.

  3. Jako nit, powiązanie Content-Type z typem klasy / żądania (JsonObjectRequest, ImageRequest itp.) Jest dość niewygodne i nieco zmniejsza elastyczność kodu wywołującego, ponieważ jesteś przywiązany do istniejącej hierarchii typów żądań Volley. Podoba mi się prostota ustawiania Content-Type jako nagłówka, jak każdy inny (tak na marginesie, nie rób tego z Volley; skończysz z dwoma nagłówkami Content-Type!). To tylko moja osobista opinia i można to obejść.

Nie oznacza to, że Volley nie ma żadnych przydatnych funkcji. Z pewnością tak. Łatwo konfigurowalne zasady ponawiania, przejrzyste buforowanie, interfejs API anulowania oraz obsługa planowania żądań i równoczesnych połączeń to świetne funkcje. Po prostu wiedz, że nie jest on przeznaczony do wszystkich przypadków użycia HTTP (patrz punkt 1 powyżej) i że istnieją pewne problemy związane z uruchomieniem Volley w produkcji w Twojej aplikacji (punkt 2).

Jeff
źródło
Pełne ładowanie pamięci jest tym, co powoli mnie zabija. Dzięki Bogu, ktoś jeszcze o tym wspomniał.
TheSunny
Biblioteka może również wykonać defensywną kopię treści żądania, więc zużycie pamięci w przypadku dużych żądań może być dwa razy większe niż można się spodziewać.
Jeff
9

Niedawno znalazłem lib o nazwie ion, który przynosi trochę więcej do stołu.

ion ma wbudowaną obsługę pobierania obrazów zintegrowaną z ImageView, JSON (przy pomocy GSON), pliki i bardzo przydatną obsługę wątków interfejsu użytkownika.

Używam go w nowym projekcie i jak dotąd wyniki były dobre. Jego użycie jest znacznie prostsze niż Volley lub Retrofit.

Tiago Gaspar
źródło
2
ion vs retrofit, który z nich polecisz?
Sreekanth Karumanaghat 20.04.16
Modernizacja jest lepsza niż ion
Rajesh Koshti
4

Dodając do zaakceptowanej odpowiedzi i tego, co powiedział LOG_TAG .... aby Volley parsował twoje dane w wątku w tle, musisz podklasę, Request<YourClassName>ponieważ onResponsemetoda jest wywoływana w głównym wątku, a parsowanie w głównym wątku może spowodować opóźnienie interfejsu użytkownika, jeśli twoja odpowiedź jest duży. Przeczytaj tutaj, jak to zrobić.

upenpat
źródło
1
racja ... siatkówka analizuje odpowiedź w głównym wątku, która powoduje, że opóźnienie jest opóźnione, gdy odpowiedź jest naprawdę duża.
Gopal Singh Sirvi
3

Modernizacja 1.9.0 vs. RoboSpice

Używam obu w mojej aplikacji.

Robospice działa szybciej niż Retrofit za każdym razem, gdy analizuję zagnieżdżoną klasę JSON. Ponieważ Spice Manger zrobi wszystko za Ciebie. W ramach modernizacji musisz utworzyć GsonConverter i dokonać deserializacji.

Utworzyłem dwa fragmenty w tej samej aktywności i zadzwoniłem w tym samym czasie z dwoma rodzajami adresów URL.

09-23 20:12:32.830  16002-16002/com.urbanpro.seeker E/RETROFIT   RestAdapter Init
09-23 20:12:32.833  16002-16002/com.urbanpro.seeker E/RETROFIT calling the method
09-23 20:12:32.837  16002-16002/com.urbanpro.seeker E/ROBOSPICE initialzig spice manager
09-23 20:12:32.860  16002-16002/com.urbanpro.seeker E/ROBOSPICE Executing the method
09-23 20:12:33.537  16002-16002/com.urbanpro.seeker E/ROBOSPICE on SUcceess
09-23 20:12:33.553  16002-16002/com.urbanpro.seeker E/ROBOSPICE gettting the all contents
09-23 20:12:33.601  16002-21819/com.urbanpro.seeker E/RETROFIT deseriazation starts
09-23 20:12:33.603  16002-21819/com.urbanpro.seeker E/RETROFIT deseriazation ends
Astma
źródło
2

I jeszcze jedna opcja: https://github.com/apptik/jus

  • Jest modułowy jak Volley, ale jest bardziej rozbudowany, a dokumentacja się poprawia, obsługując różne stosy HTTP i konwertery po wyjęciu z pudełka
  • Ma moduł do generowania mapowań interfejsu API serwera, takich jak Retrofit
  • Ma także obsługę JavaRx

I wiele innych przydatnych funkcji, takich jak markery, transformatory itp.

kalin
źródło