AndEngine утечка памяти - PullRequest
       5

AndEngine утечка памяти

2 голосов
/ 10 сентября 2011

Я обнаружил проблему в своем приложении: наличие сцен S1 и S2 и менеджера M;из S1 я могу построить и переключиться на S2, а из S2 - S1 (через менеджера).

Каждый раз, когда я переключаюсь между сценами, я хочу удалить одну из них.

Но яобнаружил, что если я переключаюсь между сценами, обе сцены сохраняются в памяти и после многих переключателей происходит сбой приложения.

некоторый псевдокод:

Менеджер:

    void build(Scene s){
    getEngine().setScene(s);
    }

    onLoadScene{
    M.build(S1);
    }

S1:

    onButtonClick{
    M.build(S2);
    }

S2:

    onButtonClick{
    M.build(S1);
    }

Поскольку я думаю, что при сборке S1 связь с S2 исчезает, а при сборке S2 S1 исчезает, и GC приходится очищать ее, если памяти недостаточно.

Как избежать сбоев приложения?

Большое спасибо.

1 Ответ

2 голосов
/ 27 июля 2012

Этого кода недостаточно, чтобы помочь вам найти утечку памяти. Но я думаю, что ваши текстуры воссоздаются, а ваши спрайты остаются привязанными к сценам. Вы хотите объединить и повторно использовать свои ресурсы. Проверяйте каждый раз, когда вы вызываете что-либо «новое» или создаете textureAtlas. В этих случаях создайте некоторый класс, который хранит старые экземпляры и реинициализирует их. Andengine может быть очень привязан к ресурсам, если вы не можете специально удалить каждый из них и все его ссылки и зависимости. Однако в большинстве игр есть ограничение на количество пуль, врагов, тайлов и т. Д., Которые вам нужны. Таким образом, можно создавать пулы для каждого типа объектов и перерабатывать их. Что вы НЕ хотите делать - это создавать новые активы каждый раз, когда вы вызываете build ().

...