SocketTimeoutException Android

9

Ich habe eine komplexe App, die viele Inhalte von meinem Webservice auf AWS herunterlädt. Ich bekomme jedoch immer SocketTimeoutException 50% der Zeit. Basierend auf meinen Recherchen vermute ich, dass es folgende Gründe geben könnte:

  • Zeit für Verbindungstimeout ist geringer: Ich habe es auf 100 Sekunden erhöht, erhalte aber immer noch diesen Fehler.
  • Speicherverlust : Ich erhalte immer GC Warnungen. Ich habe Artikel gelesen und versucht, meinen Code zu verbessern, aber es hilft auch nicht. Ich muss auch erwähnen, dass meine App 2000+ 30KB JSON-Dateien nacheinander in einem Hintergrundthread herunterlädt. Vorschläge, dies effizient zu improvisieren, wären sehr willkommen!
  • Serverprobleme : Da Amazon Web Service sehr zuverlässig ist, ist es möglicherweise nicht das zugrunde liegende Problem.
  • Mehrfaches Threading : Kann das irgendwie verantwortlich sein?
  • Fehlerhafter Download : Ich bezweifle, dass ich auf ineffiziente Weise herunterlade. Korrigiere mich, wenn ich falsch liege.

Bitte helfen Sie mir, das wahre Problem herauszufinden. Danke!

%Vor%

Fehlerprotokoll:

%Vor%     
gauravsapiens 01.02.2013, 07:48
quelle

1 Antwort

1

es ist eine Weile, die ich damit gearbeitet habe, aber ein Artikel ist wirklich zu lesen, wenn Sie nach Leistung suchen: Ссылка

Der Verbindungstimeout kann auf der Serverseite verursacht werden, wenn Sie mit einem Webserver verbunden sind, prüfen Sie, welche Fehler Sie dort erhalten.

Die GC-Statements sind nicht überraschend. Dies ist kein Speicherleck, sondern Java-Bereinigung. Vom obigen Artikel:

  

Wenn wir uns zuerst die erste Zeile der while-Schleife ansehen, sehen wir, dass für jede Zeile der gelesenen Datei ein neues String-Objekt erstellt wird:

     

while ((line = in.readLine ())! = null) {

     

Dies bedeutet beispielsweise, dass für eine 100.000-Zeilen-Datei 100.000 String-Objekte erstellt würden. Das Erstellen einer großen Anzahl von Objekten verursacht auf drei Arten Kosten: Zeit und Speicher, um den Platz für die Objekte zuzuweisen, Zeit, um die Objekte zu initialisieren, Zeit, um die Objekte zu bereinigen, sammeln die Objekte.

Was Multiple Threading betrifft, sollten Sie etwas mehr Code bereitstellen. Ihre Methode ist synchronisiert, so dass Sie zumindest mehrere Aufrufe derselben Instanz gleichzeitig vermeiden. Der NW-Code ist auf den ersten Blick sicher.

Meine Debug-Strategie besteht darin, die ersten und zweiten Speicherzeitstempel auf der Serverseite zu betrachten, wenn Sie eine Eingabezeile erhalten, um festzustellen, ob Lücken auftreten (Übertragungsfehler).

Viel Glück

    
Vincent Nikkelen 04.02.2013 20:28
quelle