2012-12-19 7 views
5

私はユーザがあるフラグメントから別のフラグメントに進むことができるアクティビティを持っています。断片が始まり、いくつかのデータをダウンロードして表示します(リソースからいくつかのアイコンを描くなど)。ユーザーは、彼らが好きな限り(断片化されるまで)断片を前進させ続けることができます。バックスタックに多数のフラグメントがあるとメモリに問題が発生する

問題はOutOfMemoryErrorが最終的に発生することです(32 MBのVMヒープ上で約90個のフラグメントが発生した後)。 90は非常によく似ていますが、私はそのようなメモリエラーレポートをフィールドで見たので、これはおそらくローエンドのデバイスで発生します。 私はonCreateViewで作成したビューを確実に作成しました。私はonDestroyViewで無効化します。私の断片が保持する唯一の他のオブジェクト(私が知る限り)は、開始時にダウンロードするデータです。通常は10〜50kbです。

私の最初の質問は、これは正常ですか?バックスタックに〜90個のフラグメントを「唯一」持つことができると期待できますか?または、私は何かについて何かできるメモリリークをどこかに持っていますか?

ユーザーが私のアプリから離れ、Androidがメモリを解放するためにプロセス全体を終了すると判断した場合、状態全体がバンドルから復元されているため、使用メモリが大幅に少なくなります。その後、ユーザーがバックスタックを通してバックプレスすると、各フラグメントは、もちろん、保存されたインスタンスから作成/再開されます。

私の2番目の質問は、これが強制的に発生する方法ですか?つまり、バックスタックに> 50個のフラグメントがある場合、一番下のものをsavedInstanceStateに殺すことを開始しますか? '

答えて

-6

はあなたのAndroidManifest.xml<Application>内のタグでこれを試してみてください:

android:largeHeap="true" 

とより多くのを助けるためにあなたのコードを提供しています。

+3

これは恐ろしい助言である - とだけ人為的にあなたがパックすることができますどのように多くのより多くのフラグメント拡張 - この問題はまだ残っています。 Googleは、メモリリークに対処するためにこれを使用しないことを明示しています。 –

関連する問題