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.
Wnioski wieloczęściowe (rozwiązanie: https://github.com/vinaysshenoy/enhanced-volley )
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!
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
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):
(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.