在我的应用中,我每3分钟刷新一次数据。如果应用程序将工作几个小时我会发生这样的错误:
java.lang.OutOfMemoryError
at org.apache.http.util.CharArrayBuffer.<init>(CharArrayBuffer.java:55)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:131)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)
at com.tab.Api.friends(Api.java:99)
at com.tab.TabLayout.updateFriends(TabLayout.java:692)
at com.tab.TabLayout.access$25(TabLayout.java:690)
at com.tab.TabLayout$7.run(TabLayout.java:684)
at java.lang.Thread.run(Thread.java:1102)
虽然我的代码在“com.tab.Api.friends(Api.java:99)”中的地方看起来像这样:
String result = "";
JSONObject jArray = null;
JSONArray friends = null;
DefaultHttpClient client = new DefaultHttpClient();
try
{
HttpGet getFriends = new HttpGet("http://##########"+fb);
HttpResponse getResponseFriends = client.execute(getFriends);
HttpEntity getFriendsEntity = getResponseFriends.getEntity();
if (getFriendsEntity != null)
result= EntityUtils.toString(getFriendsEntity);
try
{
jArray = new JSONObject(result);
}
catch(JSONException e)
{
}
}
catch(Exception e)
{
Log.d("LOADING ERROR","Friends section");
}
答案 0 :(得分:3)
你某处有内存泄漏。在某个地方,您可以在长期存在的对象中引用内存密集型数据。通过此,GC无法收集这些数据。您的应用程序将在运行的时间内使用更多内存,直到所有内存都用完为止。然后你的应用程序被OutOfMemory Exception杀死
可能对您有帮助的链接:
答案 1 :(得分:0)
尝试使用MAT工具分析内存分配。 UI或其他部分可能存在内存泄漏。 我认为发生此错误的代码不是错误的原因,而只是结果。 本教程可以帮助您:http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html
还有一件事 - 最好不要捕获异常,而是更具体的东西(如IOException等)。通过捕获Exception,您可能会捕获一些不应该被捕获的内容(例如NullPointerException),并且会在代码中的其他地方出现问题。
答案 2 :(得分:0)
我认为,Webservice会返回大量数据,这些数据并非由您的移动Ram保存。
当我在这种类型的webservice项目中工作时,我遇到了同样的问题。
请提供提供有限数据的网络服务,例如。距离当前位置记录10公里。