gpt4 book ai didi

android - SocketTimeoutException 安卓

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:49 27 4
gpt4 key购买 nike

我有一个复杂的应用程序,可以从我在 AWS 上的网络服务下载大量内容。但是,我一直有 50% 的时间收到 SocketTimeoutException。根据我的研究,我怀疑可能有以下原因:

  • 连接超时 的时间更短:我将其增加到 100 秒,但仍然不断出现此错误。
  • 内存泄漏:我不断收到 GC 警告。我已阅读文章并尝试改进我的代码,但它也无济于事。我还必须提到,我的应用程序在后台线程中一个接一个地下载 2000 多个 30KB 的 JSON 文件。非常欢迎提出有效即兴创作的建议!
  • 服务器问题:由于 Amazon Web Service 高度可靠,它可能不是根本问题。
  • 多线程:这会以某种方式负责吗?
  • 错误的下载方式:我怀疑我的下载方式是否低效。如果我错了,请纠正我。

请帮我找出真正的问题。谢谢!

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;
}

错误日志:

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)

最佳答案

我使用它已经有一段时间了,但是在寻找性能时真的推荐阅读一篇文章:http://www.kegel.com/java/wp-javaio.html

连接超时可能是在服务器端引起的,假设您连接到网络服务器,请检查您在那里收到的错误。

GC 语句并不奇怪。这不是内存泄漏,而是 Java 清理。从上面的文章:

First, if we look at the first line of the while loop, we see that a new String object is being created for every line of the file being read:

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

This means, for example, that for a 100,000 line file 100,000 String objects would be created. Creating a large number of objects incurs costs in three ways: Time and memory to allocate the space for the objects, time to initialize the objects, time to garbage collect the objects.

关于多线程,你应该提供更多的代码。您的方法是同步的,因此您至少可以避免同时对同一实例进行多次调用。乍一看,NW 代码是安全的。

我的调试策略是在您收到一行输入时首先查看服务器端和第二个存储时间戳,以查看是否出现间隙(传输错误)。

祝你好运

关于android - SocketTimeoutException 安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com