Размер кучи увеличивается при работе с libgdx

В libgdx я освобождал все ресурсы, такие как текстуры, звуковые ресурсы, а также объекты мира. Поскольку в моей игре много текстур, рисунков. Управление текстурами и звуковыми ресурсами было реализовано с помощью вызова dispose(). Но проблема все еще повторяется, и размер кучи увеличивается. Возможно, в какой-то момент ВМ не может выделить память для процесса, если она превышает максимальный размер, в итоге получается OutOfMemory. Пожалуйста, помогите мне выйти из потока this.App

  1. Домашняя активность отображается в другую активность, которая расширяет AndroidApplication (слушатель приложения).
  2. В этом я вызываю прослушиватель приложения в onCreate(), инициализируя прослушиватель здесь.
  3. Передача некоторых игровых данных слушателю вместе с контекстом.

person Pending Intent    schedule 20.10.2011    source источник


Ответы (1)


Если вы используете класс Bitmap, вы можете проверить, вызываете ли вы переработку для каждого из них перед удалением. Это исправило многие мои проблемы с памятью.

Документы по Bitmap и recycle() можно найти здесь http://developer.android.com/reference/android/graphics/Bitmap.html

Если это не поможет, вам придется немного подробнее описать структуру приложения. Возможно, у вас есть ошибочные потоки или что-то, что поглощает ресурсы. Какие инструменты вы используете для диагностики проблем с памятью?

person Jason    schedule 20.10.2011
comment
я загружаю текстуру в свою игру как новую текстуру (Gdx.files.internal (top.png));. Я не использую класс растровых изображений здесь. внешне я использую только фреймворк libgdx, а в dispose() я вызываю texture.dispose(). - person Pending Intent; 20.10.2011
comment
Пробовали ли вы использовать MAT (eclipse.org/mat), чтобы проанализировать несколько дампов и посмотреть, что съедает больше всего места? Есть некоторые интересные вещи, которые можно найти, пройдя через них. Увеличивается ли память постоянно, когда активность приостанавливается и возобновляется, или при каком-то действии в вашем приложении? - person Jason; 20.10.2011
comment
Я собираюсь изучить это - person Pending Intent; 20.10.2011
comment
Я заметил, что некоторые из float[], char[] потребляют много от уровня к уровню. Даже я правильно освобождаю ресурсы, не в состоянии управлять ими - person Pending Intent; 21.10.2011
comment
Я отредактировал сообщение и описал поток управления моей игрой, как я сказал, когда игрок выигрывает, приостанавливает или проигрывает игру, я поднимаю другую активность и уничтожаю это приложение в onDestroy(). К вашему сведению, даже я приостанавливаю, возобновляю или теряю, и для следующего уровня он увеличивается в каждом случае. - person Pending Intent; 21.10.2011
comment
Поскольку вы создаете и уничтожаете некоторые действия, и происходит утечка, вы можете прочитать эту статью из Google об утечке контекста. developer.android.com/resources/articles/ По существу, если вам нужно, чтобы долгоживущие чертежи использовали контекст приложения, если нет, то убедитесь, что контекст активности не хранится в памяти или во всем (что может быть достигнуто случайно, удерживая ресурс, связанный с этим контекстом). - person Jason; 24.10.2011