Android OutOfMemoryError при обновлении данных - PullRequest
3 голосов
/ 09 декабря 2011

В моем приложении я обновляю данные каждые 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)

Хотя мой код в этом месте: "at 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 ]

3 голосов
/ 09 декабря 2011

У вас где-то утечка памяти. Где-то вы храните ссылки на объемные данные в долгоживущем объекте. Таким образом, GC не может собирать эти данные. Ваше приложение будет использовать еще больше памяти, чем дольше оно работает, пока не будет израсходована вся память. Тогда ваше приложение будет убито с исключением OutOfMemory

Ссылки, которые могут вам помочь:

0 голосов
/ 09 декабря 2011

Я думаю, Webservice возвращает большой объем данных, который не хранится на вашем мобильном ОЗУ.

У меня была такая же проблема, когда я работал в проекте такого типа для веб-служб.которые предоставляют ограниченные данные, например.10 км от текущей записи местоположения.

0 голосов
/ 09 декабря 2011

Попробуйте использовать инструмент MAT для анализа распределения памяти.Возможно, у вас утечка памяти в пользовательском интерфейсе или какой-либо другой части.Я думаю, что код, где происходит эта ошибка, является не причиной ошибки, а только результатом.Это руководство может помочь вам: http://macgyverdev.blogspot.com/2011/11/android-track-down-memory-leaks.html

Еще одна вещь - лучше не ловить исключение, а что-то более конкретное (например, IOException и т. Д.).Перехватывая исключение, вы можете поймать что-то, что не предназначено для этого (например, NullPointerException), и возникнут проблемы в другом месте кода.

...