【发布时间】:2013-01-22 06:14:49
【问题描述】:
我有一个简单的 Android 应用程序,它从本地服务器上的 php 文件中读取一些 JSON 数据。它非常简单,直到大约一个小时前它工作正常。然而,稍事休息后(我什至没有关掉我的电脑),它突然陷入似乎是内存泄漏的问题,尽管我不是这方面的专家。
我不确定为什么会突然发生这种情况,因为我没有更改任何代码。但是当我运行应用程序时,我的 logcat 开始慢慢地开始填充这样的消息:
“GC_CONCURRENT 已释放,910K,53% 可用 3167K/6727K .....”
应用程序最终会运行,但需要等待大约 1-2 分钟。无论如何,我想知道是否有人可以检查我的代码或告诉我可能导致这种情况发生的原因。
public static JSONArray getJSONfromURL(String url) {
// initialize
InputStream is = null;
JSONArray jArray = null;
String result = "";
// http post
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
// convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "utf-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jArray = new JSONArray(result);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return jArray;
}
JSON 数据根本不是很大。
感谢您的建议。
【问题讨论】:
-
尝试在异步任务中运行你的 http 调用和 json 解析
-
好的,谢谢。我对android开发很陌生,所以我想我有一些阅读要做。这似乎很奇怪,当它工作得非常好时突然开始发生这种情况。
-
首先尝试使用单独的线程,或者更好的是异步任务。其次,使用 finally 块并关闭那里的输入流是一种更好的方法。第三,内存泄漏可能在代码中的其他地方,所以也要看看...
-
你多久调用一次这个方法?
-
只有一次。我已将问题缩小到 While((line = reader.readline() 行。我认为“行”字符串可能太长了?
标签: android json memory-leaks