Parallele HTTP-Anforderungen mit Retrofit
Ich habe ein Android-Anwendung, die derzeit Volley
Bibliothek, Netzwerkanfragen zu senden und heruntergeladene Bilder anzeigen mit NetworkImageView
.
Ich würde gerne testen Retrofit
's-Fähigkeiten, und da muss ich laufen, viele Anforderungen (in tausend) ich bin ein bisschen besorgt über die parallele Ausführung. Volley
Griffe parallele Anfragen mit der RequestQueue
dass die Grenzen der gleichzeitigen ausführen von Anfragen, um vier, während die anderen Anforderungen werden in Warteschlangen warten, um ausgeführt zu werden. In Retrofit
Dokumentationen habe ich noch nicht gefunden, einen Weg, um behandeln Sie die Anzahl der gleichzeitigen Anfragen und ich vermute, dass solche details sind für den Entwickler Links in dieser Bibliothek.
Ist das richtig? Wenn ja, gibt es eine android-orientierte Implementierung/Bibliothek zur Verfügung? Ansonsten, was sind die besten Methoden zu behandeln parallele Anfragen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachrüstung verwendet eine
Executor
für Warteschlangen-Anfragen.Standardmäßig verwendet
Executors.newCachedThreadPool
das erlaubt eine unbegrenzte Anzahl von threads. Das passt den meisten Fällen verwenden, da Sie normalerweise immer nur ein oder zwei Anfragen auf einmal geschieht.Können Sie dieses Verhalten jedoch ändern, indem Sie Ihre eigenen, wenn Gebäude, die
RestAdapter
. Rufen SiesetExecutors
und übergeben Sie einen Testamentsvollstrecker einsetzt, beschränkt thread-pool (begrenzt auf das, was Zahl, die Sie möchten). Für das zweite argument übergeben Sie einfach eine neue Instanz vonMainThreadExecutor
, so dass Rückrufe geschehen auf dem Haupt-thread.ThreadPoolExecutor
für die Bearbeitung meines threads? Wenn ja, ich war mit diesem vor Migration zuVolley
, aber ich hatte zwei wesentliche Probleme: 1) verlor ich einige Anfragen, weil die queue voll war, Volley hat eine unbegrenzte Warteschlange. 2) Einige Anfragen aus der Warteschlange entfernt wurden, weil Sie zu lange warten.java.util.concurrent
zu wählen.RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(SomeEndpoint) .setExecutors(Executors.newFixedThreadPool(5), null) .build();
Hinweis das zweite argument ist die callback-executor - dies wird die callback-auf dem gleichen thread wie der client. square.github.io/retrofit/javadoc/retrofit/...setExecutors
, es wird eine bestimmte Anzahl der erlaubten requests in der Warteschlange (wenn nötig) zu korrigieren? Wie würde man in der Lage sein zu handhaben, die Parallelität beim Empfang der Antwort von derCallBack
? Tut Nachrüstung umgehen?Executors#newCachedThreadPool
?