Vergleich der Android-Netzwerkbibliotheken: OkHTTP, Retrofit und Volley [geschlossen]

579

Zweiteilige Frage eines iOS-Entwicklers, der Android lernt und an einem Android-Projekt arbeitet, das eine Vielzahl von Anfragen von JSON nach Bild- und Streaming-Download von Audio und Video stellt:

  1. Unter iOS habe ich das AFNetworking- Projekt ausgiebig genutzt. Gibt es eine gleichwertige Bibliothek für Android?

  2. Ich habe OkHTTP und Retrofit by Square sowie Volley gelesen , habe aber noch keine Erfahrung mit der Entwicklung mit ihnen. Ich hoffe, jemand könnte für jeden konkrete Beispiele für die besten Anwendungsfälle liefern. Nach dem, was ich gelesen habe, scheint OkHTTP das robusteste der drei zu sein und könnte die Anforderungen dieses Projekts (oben erwähnt) erfüllen.

Alfie Hanssen
quelle
3
Wenn Sie die interne Implementierung von HttpUrlConnection verwenden, sollten Sie berücksichtigen, dass HttpUrlConnection stille Wiederholungsversuche für POST-Anforderungen verwendet. Das hat mir sehr geschadet. Weitere Informationen finden Sie hier: stackoverflow.com/a/37675253/2061089
oli
1
Wenn jemand eine Liste aller Netzwerkbibliotheken benötigt, finden Sie diese in meinem Blog-Beitrag androidredman.wordpress.com/2017/06/26/…
Manohar Reddy
Volley kann mit älteren Apache-, HttpUrlConnection-, Apache-4- oder OkHttp-Versionen ausgeführt werden. Wo sind Retrofit wirklich nur Läufe von OkHttp. Nachrüstung ist viel einfacher zu konfigurieren.
Bitsabhi

Antworten:

647

Ich hoffe, jemand kann für jeden konkrete Beispiele für die besten Anwendungsfälle liefern.

Verwenden Sie Retrofit, wenn Sie mit einem Webdienst kommunizieren. Verwenden Sie die Peer-Bibliothek Picasso, wenn Sie Bilder herunterladen. Verwenden Sie OkHTTP, wenn Sie HTTP-Vorgänge ausführen müssen, die außerhalb von Retrofit / Picasso liegen.

Volley konkurriert grob mit Retrofit + Picasso. Auf der positiven Seite ist es eine Bibliothek. Auf der negativen Seite handelt es sich um eine undokumentierte, nicht unterstützte Bibliothek, die den Code über die Wand wirft und eine E / A-Präsentation darauf durchführt.

BEARBEITEN - Volley wird jetzt offiziell von Google unterstützt. Bitte beziehen Sie sich auf das Google Developer Guide

Nach dem, was ich gelesen habe, scheint OkHTTP das robusteste der 3 zu sein

Retrofit verwendet OkHTTP automatisch, falls verfügbar. Es gibt einen Kern von Jake Wharton , der Volley mit OkHTTP verbindet.

und könnte die Anforderungen dieses Projekts (oben erwähnt) behandeln.

Wahrscheinlich werden Sie keine von ihnen für "Streaming-Download von Audio und Video" verwenden, gemäß der herkömmlichen Definition von "Streaming". Stattdessen verarbeitet das Medienframework von Android diese HTTP-Anforderungen für Sie.

Wenn Sie jedoch versuchen möchten, Ihr eigenes HTTP-basiertes Streaming durchzuführen, sollte OkHTTP dieses Szenario behandeln. Ich erinnere mich nicht, wie gut Volley mit diesem Szenario umgehen würde. Weder Retrofit noch Picasso sind dafür ausgelegt.

CommonsWare
quelle
4
Vielen Dank an @CommonsWare für die prägnante Antwort und den Hinweis auf den undokumentierten Steez von Volley (habe diesen Eindruck, insbesondere im Vergleich zu den anderen Projekten). Hilft mir auf jeden Fall, die Dinge in Gang zu bringen.
Alfie Hanssen
18
Eine weitere großartige Antwort von @CommonsWare. Kann jemand nachverfolgen, wie RoboSpice in all das passt?
user1923613
3
@ user1923613 github.com/octo-online/robospice Wenn Sie Volley für Netzwerkanrufe verwenden, müssen Sie Robospice nicht verwenden! Spring Android oder Google Http Client oder Retrofit). Wenn Sie schnelles Networking und Imageloading mit einem robusten Netzwerk-Client wünschen, können Sie Volleyball spielen! Sie können jedoch die normale asynchrone Android-Aufgabe ersetzen, die Sie mit Robospice verwenden, um eine bessere Leistung zu erzielen und Speicherlecks zu vermeiden!
LOG_TAG
4
@frostymarvelous: Ich bin der Meinung, dass undokumentiert und nicht unterstützt mehr als genug Rechtfertigung ist. Es ist nicht so, dass Google kein System für einen formelleren Umgang mit solchen Dingen fehlt (z. B. Android Support Library). In den zwei Jahren seit dieser Antwort gibt es eine gewisse Unterstützung durch die Community, einschließlich einer inoffiziellen Verpackung des Codes in ein Artefakt.
CommonsWare
4
@AbhinavVutukuri: Sie kommentieren eine Antwort von vor über zwei Jahren. Zu diesem Zeitpunkt gab es keine Dokumentation.
CommonsWare
361

Wenn Sie sich die Volley-Perspektive ansehen, sehen Sie hier einige Vorteile für Ihre Anforderung:

Volley konzentriert sich einerseits ganz auf die Bearbeitung einzelner, kleiner HTTP-Anfragen. Wenn Ihre HTTP-Anforderungsbearbeitung einige Besonderheiten aufweist, hat Volley wahrscheinlich einen Haken für Sie. Wenn Sie andererseits eine Eigenart in Ihrer Bildverarbeitung haben, ist ImageCache der einzige echte Haken, den Sie haben . "Es ist nicht nichts, aber es ist auch nicht viel!" Aber es hat noch weitere Vorteile wie Sobald Sie Ihre Anforderungen definiert haben, ist die Verwendung innerhalb eines Fragments oder einer Aktivität im Gegensatz zu parallelen AsyncTasks problemlos

Vor- und Nachteile von Volley:

Was ist schön an Volley?

  • Der Netzwerkteil ist nicht nur für Bilder. Volley soll ein wesentlicher Bestandteil Ihres Backends sein. Für ein neues Projekt, das auf einem einfachen REST-Service basiert, könnte dies ein großer Gewinn sein.

  • NetworkImageView ist aggressiver in Bezug auf die Bereinigung von Anforderungen als Picasso und konservativer in seinen GC-Verwendungsmustern. NetworkImageView verwendet ausschließlich starke Speicherreferenzen und bereinigt alle Anforderungsdaten, sobald eine neue Anforderung für eine ImageView gestellt wird oder sobald diese ImageView vom Bildschirm verschoben wird.

  • Performance. In diesem Beitrag wird diese Behauptung nicht bewertet, aber sie haben eindeutig darauf geachtet, in ihren Speichernutzungsmustern vernünftig zu sein. Volley bemüht sich auch, Rückrufe an den Hauptthread zu stapeln, um die Kontextumschaltung zu reduzieren.

  • Volley hat offenbar auch Zukunft. Schauen Sie sich RequestFuture an, wenn Sie interessiert sind.

  • Wenn Sie mit hochauflösenden komprimierten Bildern arbeiten, ist Volley die einzige Lösung, die hier gut funktioniert.

  • Volley kann mit Okhttp verwendet werden (neue Version von Okhttp unterstützt NIO für eine bessere Leistung)

  • Volley spielt gut mit dem Aktivitätslebenszyklus.

Probleme mit Volley:
Da Volley neu ist, werden einige Dinge noch nicht unterstützt, aber es ist behoben.

  1. Mehrteilige Anfragen (Lösung: https://github.com/vinaysshenoy/enhanced-volley )

  2. Der Statuscode 201 wird als Fehler angesehen. Der Statuscode von 200 bis 207 ist jetzt eine erfolgreiche Antwort. (Behoben: https://github.com/Vinayrraj/CustomVolley )

    Update: In der neuesten Version von Google Volley ist der Fehler mit den 2XX-Statuscodes jetzt behoben ! Dank an Ficus Kirkpatrick!

  3. Es ist weniger dokumentiert, aber viele Leute unterstützen Volleyball in Github. Eine Java-ähnliche Dokumentation finden Sie hier . Auf der Android-Entwickler-Website finden Sie möglicherweise eine Anleitung zum Übertragen von Netzwerkdaten mit Volley . Und Volley-Quellcode finden Sie bei Google Git

  4. Verwenden Sie zum Lösen / Ändern der Umleitungsrichtlinie von Volley Framework Volley mit OkHTTP (CommonsWare oben erwähnt).

Sie können auch das Vergleichen des Bildladens von Volley mit Picasso lesen

Nachrüstung:

Es wird von Square veröffentlicht. Dies bietet sehr einfach zu verwendende REST-APIs (Update: Voila! Mit NIO-Unterstützung)

Vorteile der Nachrüstung:

  • Im Vergleich zu Volley ist der REST-API-Code von Retrofit kurz und bietet eine hervorragende API-Dokumentation sowie gute Unterstützung in Communities! Es ist sehr einfach, in die Projekte hinzuzufügen.

  • Wir können es mit jeder Serialisierungsbibliothek mit Fehlerbehandlung verwenden.

Update: - In Retrofit 2.0.0-beta2 gibt es viele sehr gute Änderungen

  • Version 1.6 von Retrofit mit OkHttp 2.0 ist nun abhängig von Okio zu Unterstützung java.io und java.nio die es viel leichter zugänglich, zu speichern macht und Ihre Daten mit Hilfe verarbeitet ByteString und Buffer einige cleveren Dinge zu tun , CPU und Speicher zu sparen. (FYI: Dies erinnert mich an die OIN- Bibliothek von Koush mit NIO-Unterstützung!) Wir können Retrofit zusammen mit RxJava verwenden , um REST-Aufrufe mit rxObservables zu kombinieren und zu verketten , um hässliche Rückrufketten zu vermeiden (um Rückrufhölle zu vermeiden !!) .

Nachteile der Nachrüstung für Version 1.6:

  • Die speicherbezogene Fehlerbehandlungsfunktion ist nicht gut (in älteren Versionen von Retrofit / OkHttp) und nicht sicher, ob sie mit Okio mit Java NIO-Unterstützung verbessert wurde.

  • Wenn wir dies nicht ordnungsgemäß verwenden, kann dies zu einer minimalen Unterstützung beim Einfädeln führen.

(Alle oben genannten Nachteile wurden in der neuen Version von Retrofit 2.0 Beta behoben.)

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

Aktualisieren:

Leistungsbenchmarks für Android Async vs Volley vs Retrofit (Millisekunden, niedrigerer Wert ist besser):

Leistungs-Benchmarks für Android Async vs Volley vs Retrofit

(Zu Ihrer Information über den Informationen zu Retrofit-Benchmarks werden sich die Java NIO-Unterstützung verbessern, da die neue Version von OKhttp von der NIO Okio-Bibliothek abhängig ist.)

In allen drei Tests mit unterschiedlichen Wiederholungen (1 - 25 Mal) war Volley zwischen 50% und 75% schneller. Die Nachrüstung wurde mit beeindruckenden 50% bis 90% schneller als die AsyncTasks durchgeführt und traf denselben Endpunkt genauso oft. In der Dashboard-Testsuite führte dies dazu, dass die Daten einige Sekunden schneller geladen / analysiert wurden. Das ist ein massiver Unterschied in der realen Welt. Um die Tests fair zu gestalten, enthielten die Zeiten für AsyncTasks / Volley die JSON-Analyse, da Retrofit dies automatisch für Sie erledigt.

RetroFit gewinnt im Benchmark-Test!

Am Ende haben wir uns für Retrofit für unsere Anwendung entschieden. Es ist nicht nur lächerlich schnell, sondern passt auch sehr gut zu unserer bestehenden Architektur. Wir konnten ein übergeordnetes Callback-Interface erstellen, das automatisch Fehlerbehandlung, Caching und Paginierung durchführt, ohne dass unsere APIs einen geringen oder gar keinen Aufwand erfordern. Um in Retrofit zusammenzuführen, mussten wir unsere Variablen umbenennen, um unsere Modelle GSON-kompatibel zu machen, einige einfache Schnittstellen zu schreiben, Funktionen aus der alten API zu löschen und unsere Fragmente so zu ändern, dass keine AsyncTasks verwendet werden. Jetzt, wo wir ein paar Fragmente vollständig konvertiert haben, ist es ziemlich schmerzlos. Es gab einige wachsende Schmerzen und Probleme, die wir überwinden mussten, aber insgesamt verlief alles reibungslos. Am Anfang hatten wir einige technische Probleme / Fehler, aber Square hat eine fantastische Google+ Community, die uns dabei helfen konnte.

Wann soll man Volley benutzen?!

Wir können Volley verwenden, wenn wir Bilder laden und REST-APIs verwenden müssen. Für viele n / w-Anfragen wird gleichzeitig ein Warteschlangensystem für Netzwerkanrufe benötigt! Auch Volley hat eine bessere speicherbezogene Fehlerbehandlung als Retrofit!

OkHttp kann mit Volley verwendet werden, Retrofit verwendet standardmäßig OkHttp ! Es bietet SPDY- Unterstützung, Verbindungspooling, Festplatten-Caching und transparente Komprimierung! Vor kurzem wurde Java NIO mit der Okio- Bibliothek unterstützt.

Quelle, Gutschrift: Volley-gegen-Nachrüstung von Herrn Josh Ruesch

Hinweis: Beim Streaming hängt es davon ab, welche Art von Streaming Sie wie RTSP / RTCP wünschen.

LOG_TAG
quelle
@ Jan1337z +1 zur Information! Ich habe es aktualisiert! android.googlesource.com/platform/frameworks/volley
LOG_TAG
4
@LOG_TAG Es wäre interessant, RoboSpice in Ihrer Stichprobe zu bewerten. Wir bieten sogar ein Retrofit-Modul an, daher glaube ich, dass dies nur sehr geringe Änderungen erfordern würde. Ist die Quelle irgendwo verfügbar? Der Vorteil von RS besteht darin, dass der Lebenszyklus der Aktivität, die Netzwerkanforderungen ausführt, ordnungsgemäß verarbeitet wird. Außerdem bieten wir transparentes Caching. Ich denke, der Overhead wäre im Vergleich zu einer reinen Nachrüstanforderung gering.
Snicolas
@Snicolas Ich habe diese Benchmark-Ergebnisse von Josh Ruesch Blog erhalten. Sie können die Konvertierungen zwischen Ficus Kirkpatrick (Volley-Gründer) und Josh Ruesch sehen! Er hat noch nirgendwo ein Benchmark-Testprojekt geteilt! FYI bin ich gerade begonnen Ihr RoboSpice Lernen mit Retrofit - Probe diese Meldung gegenüber Ausgabe :)
LOG_TAG
3
Hallo! Über mehrteilige Anfragen mit Volley denke ich, dass wir damit MultipartEntityBuilderin der httpmimeBibliothek verwenden können.
BNK
2
Hat jemand diese Benchmarks überprüft? Da die Apache-http-Bibliothek in M ​​veraltet ist (und ich sie für den Multipart Builder verwendet habe), habe ich beschlossen, meinen Netzwerkcode nach Retrofit zu migrieren. Ich habe zunächst einen der GET-Aufrufe geändert, um eine Reihe von Objekten vom Server abzurufen. Ich habe das Retrofit vs AsyncTask (mit meiner eigenen JSON-Analyse) zeitlich festgelegt. Die Leistung war sehr knapp, keine dreifache Verbesserung, wie in der Spalte "Eine Diskussion" der Tabelle gezeigt. Zugegeben, der resultierende Code ist viel sauberer und ich musste keinen eigenen JSON-Parser schreiben, aber für eine einzelne GET-Anforderung war die Verbesserung nicht vorhanden.
Gary Kipnis
44

RoboSpice Vs. Volley

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

  • RoboSpice (RS) ist serviceorientiert und respektiert die Android-Philosophie mehr als Volley. Volley ist threadbasiert und auf diese Weise sollte die Hintergrundverarbeitung unter Android nicht erfolgen. Letztendlich können Sie beide Bibliotheken ausgraben und feststellen, dass sie sich ziemlich ähnlich sind, aber unsere Art der Hintergrundverarbeitung ist eher auf Android ausgerichtet. So können wir beispielsweise den Benutzern mitteilen, dass RS tatsächlich etwas im Hintergrund tut, was der Fall wäre schwer für Volleyball (eigentlich gar nicht).
  • RoboSpice und Volley bieten nette Funktionen wie Priorisierung, Wiederholungsrichtlinien und Stornierung von Anfragen. RS bietet jedoch noch mehr: ein erweitertes und umfangreiches Caching mit Cache-Verwaltung, Anforderungsaggregation, mehr Funktionen wie das Umschalten auf eine ausstehende Anforderung, das Behandeln des Cache-Ablaufs ohne Abhängigkeit von Server-Headern usw.
  • RoboSpice macht mehr außerhalb des UI-Threads: Volley wird Ihre POJOs im Haupt-Thread deserialisieren, was für mich schrecklich ist. Mit RS reagiert Ihre App schneller.
  • In Bezug auf die Geschwindigkeit brauchen wir definitiv Metriken. RS ist jetzt superschnell geworden, aber wir haben noch keine Zahl, die wir hier eintragen können. Volley sollte theoretisch etwas schneller sein, aber RS ​​ist jetzt massiv parallel ... wer weiß?
  • RoboSpice bietet einen großen Kompatibilitätsbereich mit Erweiterungen. Sie können es mit okhttp, retrofit, ormlite (beta), jackson, jackson2, gson, xml serializer, google http client, spring android ... ziemlich viel verwenden. Volley kann mit ok http verwendet werden und verwendet gson. das ist es.
  • Volley bietet mehr UI-Zucker als RS. Volley bietet NetworkImageView, RS einen Spicelist-Adapter. In Bezug auf die Funktionen ist es noch nicht so weit, aber ich glaube, dass Volley in diesem Thema weiter fortgeschritten ist.
  • Seit der ersten Veröffentlichung wurden in RoboSpice mehr als 200 Fehler behoben. Es ist ziemlich robust und wird häufig in der Produktion eingesetzt. Volley ist weniger ausgereift, aber seine Nutzerbasis sollte schnell wachsen (Google-Effekt).
  • RoboSpice ist auf maven central verfügbar. Volley ist schwer zu finden;)
Snicolas
quelle
Robospice verwendet Android-Dienste für REST-Anrufe. Können wir Robospice mit Retrofit verwenden, um den Aufwand für das Gson-Parsen zu minimieren, genauso wie wir Volley (auf Laufflächenbasis) mit Robospice verwenden können? (Ich bin mir nicht sicher, ob es das richtige QSN ist) Ich suche nur nach Volley mit Service!
LOG_TAG
1
Volley mit Service ist im Grunde RS. Oder chronologisch gesehen ist Volley RS ohne Service und es fehlen nur wenige andere Funktionen. Und ja, Sie können Retrofit mit RS verwenden und sogar okhttp hinzufügen, wenn Sie möchten.
Snicolas
7
Warum ist Volley schwer zu finden? compile 'com.mcxiaoke.volley:library:1.0.+'
Rob
1
@ Rob Es gab eine Zeit, in der der Klon von mcxiaoke nicht verfügbar war. Sie mussten Volley manuell in Ihre App aufnehmen.
frostymarvelous
"Volley wird Ihre POJOs auf dem Haupt-Thread deserialisieren". Sie können die zurückgegebenen JSON-Daten empfangen und in einem separaten Thread selbst deserialisieren, wenn dies ein Problem darstellt.
AndroidDev
20

AFNetworking für Android:

Schnelles Android-Netzwerk ist da

Die schnelle Android-Netzwerkbibliothek unterstützt alle Arten von HTTP / HTTPS-Anforderungen wie GET, POST, DELETE, HEAD, PUT, PATCH

Die Fast Android Networking Library unterstützt das Herunterladen von Dateitypen aller Art

Die schnelle Android-Netzwerkbibliothek unterstützt das Hochladen aller Dateitypen (unterstützt das mehrteilige Hochladen).

Fast Android Networking Library unterstützt das Abbrechen einer Anfrage

Die schnelle Android-Netzwerkbibliothek unterstützt das Festlegen der Priorität für jede Anforderung (LOW, MEDIUM, HIGH, IMMEDIATE).

Die schnelle Android-Netzwerkbibliothek unterstützt RxJava

Da OkHttp als Netzwerkschicht verwendet wird, werden folgende Funktionen unterstützt:

Die schnelle Android-Netzwerkbibliothek unterstützt die HTTP / 2-Unterstützung, sodass alle Anforderungen an denselben Host einen Socket gemeinsam nutzen können

Die schnelle Android-Netzwerkbibliothek verwendet Verbindungspooling, wodurch die Anforderungslatenz verringert wird (wenn HTTP / 2 nicht verfügbar ist).

Transparentes GZIP verkleinert die Downloadgröße

Die schnelle Android-Netzwerkbibliothek unterstützt das Zwischenspeichern von Antworten, wodurch das Netzwerk für wiederholte Anforderungen vollständig vermieden wird

Danke: Die Bibliothek wurde von mir erstellt

Amit Shekhar
quelle
1
Sie geben an, dass Ihre Bibliothek HTTP / 2 unterstützt, sagen jedoch nicht, ob für die HTTP / 2-Unterstützung eine API-Anforderung besteht. Mein Verständnis war, dass Android-API-Level unter 5.0 nicht über die richtigen SSL-Verschlüsselungsmethoden zur Unterstützung von HTTP / 2 verfügte. Nicht klopfen, sondern nur versuchen, Ihre vorgeschlagene Lösung vollständig zu bewerten.
DoctorD
@AmitShekhar: Ich wollte nur wissen, welches für API-Aufrufe in Android am besten geeignet ist. Ich verwende die Android Networking Library. Was ist also großartig, um Retrofit, Volley oder Android Networking zu implementieren?
Parth Bhayani
@Amit Shekhar Wie effizient ist Fast Android Networking für das mehrteilige Hochladen von Bildern, insbesondere wenn es um Szenarien mit geringem Internet geht?
user3135923
18

Async HTTP Client loopj vs. Volley

Die Besonderheiten meines Projekts sind kleine HTTP-REST-Anforderungen, alle 1-5 Minuten.

Ich verwende seit langer Zeit einen asynchronen HTTP-Client (1.4.1). Die Leistung ist besser als bei Verwendung des Vanilla Apache httpClient oder einer HTTP-URL-Verbindung. Wie auch immer, die neue Version der Bibliothek funktioniert bei mir nicht: Library Inter Exception Cut Chain of Callbacks.

Das Lesen aller Antworten motivierte mich, etwas Neues auszuprobieren. Ich habe die Volley HTTP-Bibliothek ausgewählt.

Nachdem ich es einige Zeit benutzt habe, auch ohne Tests, sehe ich deutlich, dass die Reaktionszeit auf 1,5x, 2x Volley gesunken ist.

Vielleicht ist Retrofit besser als ein asynchroner HTTP-Client? Ich muss es versuchen. Aber ich bin mir sicher, dass Volley nichts für mich ist.

Sergey Vakulenko
quelle
Irgendeine Analyse über Retrofit Vs AsyncHttpClient ??? Bitte posten, wenn ja @Sergey
IshRoid
Ich benutze AsyncHttpClient seit einigen Jahren. Der schlechte Teil ist, dass es gibt, dass das Github-Repo 2 Jahre ohne Commit ist.
Vitor Hugo Schwaab
Es ist nicht mehr aktuell, async http ist zu altmodisch. Ziehen Sie in Betracht, zu einer anderen Bibliothek zu wechseln. Volley ist auch eine sehr gute Wahl geworden.
Sergey Vakulenko
Sergey, @IshRoid Ich suche immer noch nach einer Antwort auf Ihre Frage. Ich verwende AsyncHttpClient, sollte ich etwas anderes wie RxJava Retrofit oder etwas anderes verwenden. Bitte lassen Sie es mich wissen. Ich warte gespannt auf die Antwort
Deep Dave
11

Um der Diskussion aus meiner Erfahrung mit Volley etwas hinzuzufügen:

  1. Volley verarbeitet Streaming-Uploads oder -Downloads in keiner Weise. Das heißt, der gesamte Anforderungshauptteil muss sich im Speicher befinden, und Sie können weder eine verwenden OutputStream, um den Anforderungshauptteil in den zugrunde liegenden Socket zu schreiben, noch können Sie eine verwenden InputStream, um den Antworttext zu lesen, wie dies bei Basic der HttpURLConnectionFall ist. Daher ist Volley eine schlechte Wahl für das Hoch- oder Herunterladen großer Dateien. Ihre Anfragen und Antworten sollten klein sein. Dies ist eine der größten Einschränkungen von Volley, auf die ich persönlich gestoßen bin. Für das, was es wert ist, hat OkHttp Schnittstellen für die Arbeit mit Streams.

  2. Das Fehlen einer offiziellen Dokumentation ist ärgerlich, obwohl ich das durch Lesen des Quellcodes umgehen konnte, der ziemlich einfach zu befolgen ist. Was störender ist, ist, dass Volley, soweit ich das beurteilen kann, keine offiziellen Release-Versionen und kein Maven- oder Gradle-Artefakt hat und daher die Verwaltung als Abhängigkeit mehr Kopfschmerzen bereitet als beispielsweise jede der Bibliotheken, die Square veröffentlicht hat . Sie klonen einfach ein Repo, bauen ein Glas und sind auf sich allein gestellt. Suchen Sie nach einer Fehlerbehebung? Holen Sie und hoffen Sie, dass es da ist. Sie könnten auch andere Sachen bekommen; es wird nicht dokumentiert. Meiner Meinung nach bedeutet dies effektiv, dass Volley eine nicht unterstützte Bibliothek von Drittanbietern ist, obwohl die Codebasis einigermaßen aktiv ist. Vorbehalt Emptor.

  3. Das Verknüpfen des Inhaltstyps mit dem Klassen- / Anforderungstyp (JsonObjectRequest, ImageRequest usw.) ist etwas umständlich und verringert die Flexibilität des aufrufenden Codes ein wenig, da Sie an die vorhandene Hierarchie des Anforderungstyps von Volley gebunden sind. Ich mag die Unkompliziertheit, Content-Type wie alle anderen als Header festzulegen (tun Sie dies übrigens nicht mit Volley; Sie erhalten am Ende zwei Content-Type-Header!). Das ist jedoch nur meine persönliche Meinung und kann umgangen werden.

Das heißt nicht, dass Volley einige nützliche Funktionen nicht hat. Das tut es sicherlich. Leicht anpassbare Wiederholungsrichtlinien, transparentes Caching, eine Abbruch-API und Unterstützung für die Anforderungsplanung und gleichzeitige Verbindungen sind großartige Funktionen. Sie müssen nur wissen, dass dies nicht für alle HTTP-Anwendungsfälle vorgesehen ist (siehe Punkt 1 oben) und dass es einige Kopfschmerzen gibt, wenn Volley in Ihrer App für die Produktion verwendet wird (Punkt 2).

Jeff
quelle
Das vollständige Laden des Speichers ist das, was ich langsam töte. Gott sei Dank hat es jemand anderes erwähnt.
TheSunny
Die Bibliothek erstellt möglicherweise auch eine defensive Kopie Ihres Anforderungshauptteils, sodass der Speicherverbrauch für große Anforderungen doppelt so hoch sein kann, wie Sie es erwarten.
Jeff
9

Ich habe kürzlich eine Bibliothek namens ion gefunden , die ein kleines Extra auf den Tisch bringt.

ion verfügt über eine integrierte Unterstützung für das Herunterladen von Bildern, die in ImageView, JSON (mithilfe von GSON), Dateien und eine sehr praktische Unterstützung für das Threading von Benutzeroberflächen integriert ist.

Ich verwende es für ein neues Projekt und bisher waren die Ergebnisse gut. Die Verwendung ist viel einfacher als bei Volley oder Retrofit.

Tiago Gaspar
quelle
2
ion vs retrofit, welches würdest du empfehlen?
Sreekanth Karumanaghat
Nachrüstung ist besser als Ion
Rajesh Koshti
4

Hinzufügen zu der akzeptierten Antwort und dem, was LOG_TAG gesagt hat ... Damit Volley Ihre Daten in einem Hintergrundthread analysieren kann, müssen Sie eine Unterklasse erstellen, Request<YourClassName>da die onResponseMethode im Hauptthread aufgerufen wird und das Parsen im Hauptthread dazu führen kann, dass die Benutzeroberfläche verzögert wird, wenn Ihre Antwort erfolgt ist groß. Lesen Sie hier, wie das geht.

upenpat
quelle
1
Richtig ... Volley analysiert die Antwort auf den Haupt-Thread, die dazu führt, dass die Antwort verzögert wird, wenn die Antwort wirklich groß ist.
Gopal Singh Sirvi
3

Nachrüstung 1.9.0 gegen RoboSpice

Ich verwende beide in meiner App.

Robospice funktioniert schneller als Retrofit, wenn ich die verschachtelte JSON-Klasse analysiere. Weil Spice Manger alles für Sie tun wird. In Retrofit müssen Sie GsonConverter erstellen und deserialisieren.

Ich habe zwei Fragmente in derselben Aktivität erstellt und dieselbe Zeit mit zwei gleichen URLs aufgerufen.

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
Asthme
quelle
2

Und noch eine Option: https://github.com/apptik/jus

  • Es ist modular wie Volley, aber erweitert und die Dokumentation verbessert sich und unterstützt sofort verschiedene HTTP-Stacks und -Konverter
  • Es verfügt über ein Modul zum Generieren von Server-API-Schnittstellenzuordnungen wie Retrofit
  • Es hat auch JavaRx-Unterstützung

Und viele andere nützliche Funktionen wie Marker, Transformatoren usw.

Kalin
quelle