2011-09-09 13 views
2

私のアプリで問題が見つかりました: シーンS1とS2とマネージャMに持っている必要があります。私はS1から構築してS2に切り替えることができ、S2からはS1を得ることができます(すべてマネージャー経由)。AndEngineメモリリーク

シーンを切り替えるたびに、そのうちの1つを削除します。

しかし、シーン間で切り替えると、両方のシーンがメモリに保存され、多くのスイッチアプリケーションがクラッシュした後に、そのことがわかりました。

いくつかの擬似コード:

マネージャー:

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

    onLoadScene{ 
    M.build(S1); 
    } 

S1:

onButtonClick{ 
    M.build(S2); 
    } 

S2:

onButtonClick{ 
    M.build(S1); 
    } 

私はS2へS1のリンクを構築するとき、私が思う通りにはdissapearedされますおよび ビルドS2、S1 dissapeardとGCでメモリ不足の場合はクリーニングする必要があります。

アプリケーションのクラッシュを避けるにはどうすればよいですか?

Thxたくさん。

答えて

2

メモリリークを見つけるのに十分なコードではありません。しかし、私の推測では、テクスチャが再現され、スプライトはシーンに付いたままです。リソースをプールして再利用する必要があります。 "新しい"ものを呼び出すたびに、またはtextureAtlasを作成するたびにチェックしてください。そのような場合は、古いインスタンスを格納して再初期化する何らかの種類のクラスを作成します。 Andengineは、それぞれの参照と依存関係を個別に削除することができない限り、リソースに非常に固執する可能性があります。 しかし、ほとんどのゲームでは、必要な弾丸、敵、bgタイルなどの数に制限があります。そのため、各オブジェクトタイプのプールを設定してリサイクルすることが可能です。あなたがしたいと思っていないのは、あなたがcalビルドするたびに新しい資産を作ることです。