2011-12-05 3 views
3

ヒープが成長しているのを見ています。Android、ヒープが成長するのが見えますが、停止する必要があります

Grow heap (frag case)

それが使用さ32メガバイトでアプリがクラッシュします自分の携帯電話上のログ

全体で見られています。他の携帯電話はもちろん、今

2.2アンドロイドを実行しているいくつかのリソースとのいずれかが存在する場合、私は、私のビットマップ上 recycle()を使用してnullに物事を設定し、複雑なデータ構造からアイテムをポップし、 System.gc()にを使用しています、16メガバイトになりますアプリ

しかし、ヒープはまだ成長し、その問題...を通じて、ガベージコレクションを呼び出し、最終的

それが機能を継続できるように、私はちょうどリソースをダンプするアプリを強制するにはどうすればよいです。

は、それは常に通常超える「ビットマップのVM予算」ですが、私はまたして多くのことを苦労私はちょうど私が持っていた「クリアビットマップVM」コマンド

答えて

16

へのアクセス権を持っていないことをもっともっと感じていこの問題。あなたができることはたくさんあります。

  1. は、各ビットマップ上のリサイクルを呼び出し、nullに設定してください。(bitmap.recycle()このビットマップが使用するrelaeseすべてのメモリではなく、ビットマップオブジェクトを無効にしない)ことができます。

  2. このlinkに指定されているように、レイアウトに関連付けられたdrawablesをアンバインドすることもできます。

  3. hashmapsWeakHashmapsに変換することができます。システムのメモリが不足している場合には、そのメモリがリセッされるようになります。

  4. すべてのビットマップのサイズを変更できます。このlを見てくださいink.

  5. システム全体がメモリ不足のときにコールを受け取るアクティビティでonLowMemory()メソッドをオーバーライドできます。いくつかのリソースをそこから解放することができます。

  6. オブジェクトをSoftReferenceまたはWeakreferenceにすると、低メモリ状態で解放されます。

しかし、本当の事実は、すべてこれはメモリの問題/クラッシュのあなたのアウトを遅らせることができますが、事は、あなたがどこかに自分の活動状況やメモリをリークしなければならないということですので、それを排除することができない、ということです。

+1

コールバックとsavephoto非同期タスクの間で、camera.takePictureを呼び出すとヒープが大きくなります。私は自由にするためにすべてを探しましたが、それは本当に下に来るものは、写真を撮るボタンに組み込まれています – CQM

+1

あなたは別の場所にメモリを漏らしている可能性があります。 –

+0

私は1つのアクティビティを持っていますが、どのようにコンテキストを漏らしていますか?私がSystem.exit(0)を使ってそのアクティビティを閉じる場所では、閉じた – CQM

関連する問題