Wie behalte ich den Fortschrittsbalkenstatus bei der Verwendung von Volley?

8

Es ist einfach, den Fortschrittsbalkenstatus beizubehalten, wenn ich AysncTask mit Fragmenten Callback verwende, aber wie soll ich es mit Volley erreichen? Ich kann AsyncTask nicht verwenden, weil es veraltet ist und Volley besser und schneller ist. Jede Hilfe oder Tipp wird dankbar sein.

Ich verwende google Volley, um Anfragen zu posten und zu erhalten

    
Rahul Gupta 19.12.2013, 16:39
quelle

4 Antworten

17

Ich denke, es gibt hier Missverständnisse.

Erstens, Volley schneller als AsyncTask.

Hier werden Äpfel und Orangen verglichen. Sie benutzen beide Threads. Volley-Threads sind nicht schneller als die Threads in der asynchronen Task. Die Warteschlangen sind getrennt, aber darum geht es. In API 11 & amp; höher können Sie Ihren eigenen Threadpool für AsyncTask Instanzen verwenden.

Zweitens, definiere besser.

  • Volley wurde entwickelt, um eine Menge leichter Payloads (GET / POST) an einen Server zu senden und ziemlich schnelle Antworten zu erhalten. Diese Antworten können dann vom Anrufer verwendet werden.

  • AsyncTask wurde entwickelt, um eine bestimmte Aufgabe außerhalb des UI-Threads abzuschließen und verschiedene Rückrufe für den Status dieser Aufgabe bereitzustellen.

Für Ihre ProgressBar gehe ich davon aus, dass Sie entweder versuchen, den Fortschritt einer Anfrage zu ermitteln, die gerade ausgeführt wird. In der Volley-Welt, da erwartet wird, dass sie winzig sind, haben Sie ziemlich viele Zustände. Not Started, Executing (enthält auch Start Parsing) und Done (bestehend aus Erfolg, Fehler und abgebrochen und so). Wie Sie mit AsyncTask wissen, gibt es einen Rückruf für onProgress , wenn Sie publishProgress verwenden. Ihre Instanz kann also alles, was sie senden möchte, als Fortschrittsanzeige definieren.

Wenn Ihre Nutzlast groß ist und Sie Zeit brauchen, um auf den Server zu wechseln, ist Volley möglicherweise nicht angemessen. Volley macht keine gute Arbeit oder versucht sogar, große Nutzlasten von und zu einem Server zu senden. Der Grund ist, dass dies nicht genau das ist, wofür es bestimmt ist. So wie es erfordert, dass alle Nutzdaten, Upload und Empfang, vollständig in den Speicher passen. Wenn Sie also ein paar Volley-Anfragen haben, die alle eine 1MB-Nutzlast und eine 1MB-Antwort haben, könnten Sie sehen, dass sich das ziemlich schnell aufaddiert.

Volley ist eine großartige Bibliothek, aber überlegen Sie, wofür es empfohlen wird. Lesen Sie die Dokumentation und Implementierung des Codes für weitere Informationen.

Wenn Sie etwas tun, das ziemlich lange dauern wird, würde ich einen spezifischen Anfragetyp schreiben, der Inhalte sendet und streamt. Auf diese Weise können Sie feststellen, wie viel Arbeit mit der Anfrage noch verbleibt. Ich gehe davon aus, dass Sie die gesendeten und empfangenen Bytes als Maßstab für den Fortschritt verwenden.

    
Greg Giacovelli 19.12.2013, 17:03
quelle
4

Es ist eine ziemlich einfache Lösung. Bevor Sie Ihre Volley-Anfrage machen, rufen Sie die Methode progress.show () auf, und rufen Sie dann Ihre Antwort auf: progress.dismiss () Habe das einfach gemacht und es funktioniert großartig!

    
Teddy Wilson 12.08.2015 19:25
quelle
3

Sie können der Warteschlange einen Listener hinzufügen, der ausgeführt wird, wenn die Anfrage endet

%Vor%     
Jch Pal 26.05.2016 11:57
quelle
0

Es ist sehr einfach, das zu tun ... siehe den folgenden Codeausschnitt

%Vor%     
Balman Rawat 13.01.2016 06:40
quelle

Tags und Links