【发布时间】:2017-10-31 23:27:49
【问题描述】:
我使用下面的代码
private String resultGET(String addr)
{
try
{
String result = "";
HttpURLConnection conn = null;
addr = (isFull)?addr:Statics.fullURL(addr);
try
{
URL url = new URL(addr);
conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent", Statics.USER_AGENT);
InputStream ips = conn.getInputStream();
int responseCode = conn.getResponseCode();
if (200 != responseCode)
{
Feedback.setError("GET error: " + responseCode + " on " + addr);
return "";
}
BufferedReader bufr = new BufferedReader(new InputStreamReader(ips));
String line;
while ((line = bufr.readLine()) != null) result += line;
bufr.close();
} finally{if (null != conn) conn.disconnect();}
return result;
} catch(Exception e)
{
Feedback.setError("get fault " + Utils.stackTrace(e));
return "";
}
}
Feedback 只是一个 Java 类,我在内部使用它来处理我发送回 Android 应用程序前端的所有消息(这是一个混合应用程序,上面的代码是我为该应用程序编写的插件的一部分) .
我发现当返回任何大量数据时,resultGETcall 会变得异常缓慢。例如,一个 43Kb 的 Javascript 文件——我后来用来通过 Duktape 运行 JS 代码需要 1 分钟的时间来下载和保存。
当谈到 Java 时,我还是个新手,所以我想我在这里做错了什么导致了这个问题。我非常感谢任何能够让我走上正轨的人。
一会儿……
我现在已经在 Android 6 设备而不是我的默认 Android 4.4.2 设备上测试了这个问题。在 Android 6 上,下载 + 文件保存速度为 5 秒。在 Android 4.4.2 上超过 40 秒。早期版本的 Android 上的 HTTPURLConnection 是否存在任何已知问题?我
【问题讨论】:
-
尝试 Http 免费且高效的库,例如 Retrofit journaldev.com/13639/retrofit-android-example-tutorial 或 Volley code.tutsplus.com/tutorials/… 这些比您的示例更高效且性能更高
-
我不相信那些会更快。没有理由。
-
download + file save您没有保存到文件中。如果你这样做了,你甚至不需要 StringBuilder,但可以直接逐行写入 -buffered- FileOutputStream。 -
是的。
resultGET是我从多个地方调用的通用例程。有时我会在内部使用字符串结果,有时我会保存到文件中。