mam złożoną aplikację, która pobiera dużo treści z mojego usługa na AWS. Jednak nadal otrzymuję 50% czasu. Na podstawie swoich badań, podejrzewam, że może być z następujących powodów:SocketTimeoutException Android
- Czas limit czasu połączenia jest mniej: I wzrosła do 100 sekund, ale wciąż otrzymuję ten błąd.
- Przeciek pamięci: Ciągle otrzymuję ostrzeżenia
GC
. Czytałem artykuły i próbowałem ulepszyć mój kod, ale to też nie pomaga. Muszę również wspomnieć, że moja aplikacja pobiera 2000 + 30KB plików JSON jeden po drugim w wątku w tle. Sugestie, aby skutecznie improwizować, byłyby bardzo mile widziane! - Server wystawia: Od Amazon Web Service jest wysoce niezawodny, nie może być podstawowy problem.
- Multiple gwintowania: Czy to może być odpowiedzialny jakoś?
- Błędny sposób pobierania: Wątpię, czy pobieram w sposób nieefektywny. Popraw mnie, jeśli się mylę.
Proszę pomóż mi znaleźć prawdziwy problem. Dzięki ! log
public synchronized String getJSONString(String url)
{
try {
URL url1 = new URL(url);
URLConnection tc = url1.openConnection();
tc.setConnectTimeout(timeout);
tc.setReadTimeout(timeout);
// tc.connect();
br = new BufferedReader((new InputStreamReader(tc.getInputStream())),8000);
while ((line = br.readLine()) != null) {
sb.append(line+"\n");
}
br.close();
json = sb.toString();
return json;
}
catch(Exception e)
{
Log.e("JSON Downloader", "Error downloading feed/article ");
e.printStackTrace();
}
return null;
}
Błąd:
02-01 06:37:43.375: W/System.err(5548): java.net.SocketTimeoutException
02-01 06:37:43.375: W/System.err(5548): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491)
02-01 06:37:43.375: W/System.err(5548): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
02-01 06:37:43.375: W/System.err(5548): at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
02-01 06:37:43.375: W/System.err(5548): at java.io.InputStream.read(InputStream.java:163)
02-01 06:37:43.375: W/System.err(5548): at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
02-01 06:37:43.375: W/System.err(5548): at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
02-01 06:37:43.375: W/System.err(5548): at libcore.io.Streams.readAsciiLine(Streams.java:201)
02-01 06:37:43.375: W/System.err(5548): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:544)
02-01 06:37:43.375: W/System.err(5548): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:784)
02-01 06:37:43.375: W/System.err(5548): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
02-01 06:37:43.375: W/System.err(5548): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
02-01 06:37:43.375: W/System.err(5548): at com.in.feeds.JSONDownloader.getJSONString(JSONDownloader.java:65)
02-01 06:37:43.375: W/System.err(5548): at com.in.feeds.JSONDownloader.getJSONObjectFromUrl(JSONDownloader.java:45)
02-01 06:37:43.375: W/System.err(5548): at com.in.fullarticle.ArticlePage$LoadArticle.run(ArticlePage.java:383)
02-01 06:37:43.375: W/System.err(5548): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
02-01 06:37:43.375: W/System.err(5548): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-01 06:37:43.375: W/System.err(5548): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-01 06:37:43.375: W/System.err(5548): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-01 06:37:43.375: W/System.err(5548): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-01 06:37:43.375: W/System.err(5548): at java.lang.Thread.run(Thread.java:856)