httpurlconnection ist sehr langsam auf Android 4.2

9

Ich kann erfolgreich Daten mit httpurlconnection verbinden, senden und empfangen. Aber es dauert sehr lange, alle Daten auf meinem Handy (Samsung s4, 4.2) und auf dem Android 4.2 Emulator zu laden. Aber es dauert fast 1-2 Sekunden (was sehr schnell ist) Bilder auf Android 2.3.x Emulator zu laden. Schneller als meine Galaxy S4 auf http-Verbindung.

Ich verwende AsyncTask und mein Code funktioniert gut auf beiden. Es ist nur langsam auf Android 4.2s. Ich habe versucht, chunkedStreaming zu entfernen, am Leben zu bleiben, Zeitüberschreitungswerte usw. zu ändern, aber immer noch keinen Erfolg

Hier ist mein Code

%Vor%

Gibt es Unterschiede zwischen den httpurlconnections von 4.2 und 2.3.x? Was ist hier falsch?

AKTUALISIEREN!

Ich habe mit Log.e () getestet, welche Zeile am meisten Zeit benötigt.

%Vor%

Zwischen 3 und 4 werden 5-6 Sekunden in der Zeile

ausgeführt %Vor%

AKTUALISIEREN !!

Diese Wartezeit (siehe vorherige Aktualisierung) bezieht sich auf die URL Verbindung (6.000); setConnectTimeout (6000);

Wenn ich Timeout 1000 mache, dann antwortet die Verbindung schnell (1 Sekunde auf die Leitung wartend)

%Vor%

Keine Ahnung, warum das passiert

    
Yunus Yurtturk 08.11.2013, 23:10
quelle

2 Antworten

3

Setzen Sie urlConnection.setConnectTimeout () auf ein niedrigeres Zeitlimit.

Die Klassendokumentation für URLConnection.setConnectTimeout () sagt:

  

Legt die maximale Wartezeit in Millisekunden für die Verbindung fest. Die Verbindung zu einem Server schlägt mit einer SocketTimeoutException fehl, wenn die Zeitüberschreitung verstrichen ist, bevor eine Verbindung hergestellt wurde. Der Standardwert 0 bewirkt, dass wir eine blockierende Verbindung herstellen. Dies bedeutet nicht, dass wir nie auszählen werden, aber es bedeutet wahrscheinlich, dass Sie nach einigen Minuten ein TCP-Timeout erhalten.

     

Warnung: Wenn der Hostname in mehrere IP-Adressen aufgelöst wird, ist dies der Fall   Client wird jedes in RFC 3484 Reihenfolge versuchen. Wenn Sie sich mit jedem von diesen verbinden   Adressen fehlschlagen, werden mehrere Zeitüberschreitungen vor der Verbindung verstreichen   Versuch löst eine Ausnahme aus. Hostnamen, die sowohl IPv6 als auch   IPv4 haben immer mindestens 2 IP-Adressen.

Ich hatte ursprünglich auf urlConnection.setConnectTimeout(30000); und dann auf urlConnection.setConnectTimeout(1000) . Sofort sah ich schnellere Ergebnisse.

Hoffe, das hilft!

    
w3bshark 20.11.2013 22:54
quelle
1

Sie haben erwähnt, dass Sie AsyncTask verwenden, versuchen Sie, mehrere Aufgaben gleichzeitig auszuführen?

Wenn das der Fall ist, sollten Sie beachten, dass AsyncTasks ab Android 4.0 standardmäßig serialisiert ist. Das bedeutet, dass der Executor eine Aufgabe nach der anderen ausführt .

Wenn Sie das vorherige Verhalten beibehalten möchten, können Sie das folgende Konstrukt verwenden:

%Vor%

Weitere Informationen finden Sie in diesem Blogbeitrag:
Ссылка

    
nicopico 09.11.2013 00:33
quelle