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:
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! Bitte helfen Sie mir, das wahre Problem herauszufinden. Danke!
%Vor%Fehlerprotokoll:
%Vor%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
Tags und Links memory-leaks android multithreading socket-timeout-exception