2011-12-09 47 views
3

在我的应用程序中,我每3分钟刷新一次数据。如果应用程序将进行几个小时的工作I'go这有点错误:Android OutOfMemoryError刷新数据

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

回答

3

你在某个地方有内存泄漏。某处您持有长寿命对象中对内存密集型数据的引用。由此GC不能收集这些数据。运行时间越长,您的应用程序使用的内存就越多,直到所有内存用完。然后,您的应用程序被终止与内存溢出异常

链接,可以帮助你:

0

尝试使用MAT工具来分析内存分配。您可能在UI或其他部分有内存泄漏。 我认为发生此错误的代码不是错误的原因,而只是结果。 本教程可以帮助您:http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html

还有一件事 - 最好不要抓住异常,但更具体的东西(如IOException等)。通过捕获异常,你可能会发现一些不希望被捕获的东西(f.e.NullPointerException),并会在代码的其他地方出现问题。

0

我认为,Webservice的返回未通过持有大量的数据你的手机Ram。

我在使用这种类型的webservice项目时遇到了同样的问题。

请提供web服务,提供有限的数据,例如。距离当前位置记录10公里。