2011-10-21 1 views
3

私はAndroidでメモリリークについて読んできました。私のアプリケーションでは、私はjava.lang.OutOfMemoryError: bitmap size exceeds VM budget例外を得ていた。私はそれをgoogledとして、私はそれが一般的なエラー(this SO questionと問題を扱うthis SO question)と私は示唆された解決策を使用することがわかった。
公式の事例を説明している公式Android documentationと、問題を扱っているSO questionが見つかりました。これは一例で述べている:アンドロイドメモリリーク

描画可能自体はターンで参照 ほとんど何でもする

Iを持っている活動(コンテキスト)へ の参照を持っているのTextViewへの参照を持っていますDrawableが静的として宣言されていない場合、なぜアクティビティのonDestroy()メソッドで破棄されないのですか? Drawableが破棄され、TextViewが破棄され、アクティビティが破棄されます。参照もメモリリークもありません。どのように動作するはずですか?

+1

http://mobi-solutions.blogspot.com/2010/08/how-:このビデオで説明されているどのようにGCの実行、およびアンドロイドのメモリ管理についての他の多くの有用な情報

あなたが作成したい場合は-htmlでもこれをチェックしてください。 –

+0

thanx、niceの例 – Maggie

答えて

2

私はまだ一つのことを理解していない:Drawableのは、それがアクティビティのonDestroy()メソッドで破壊されていない理由 静的として宣言されていない場合は? Drawableが破棄され、TextViewが破棄され、アクティビティが破棄されます。 参照がなく、メモリリークはありません。どうすれば 作品になっていませんか?

はい、それは動作するはずですが、onDestroy()ですぐに破棄されない可能性があります。ガベージコレクタが実行される正確な時刻は予測できません。それを引き起こす多くのことがあります。たとえば、アプリケーションで許容されるヒープメモリが不足している場合、または他のアプリケーションがメモリをさらに割り当てようとしている場合...

すぐにビットマップを破棄したい場合は、Bitmap.recycle()に電話する必要があります。

http://www.youtube.com/watch?v=_CruQY55HOk

+0

は、onDestroy()で手動で割り当てを解除する必要があるビットマップ以外のオブジェクトはありますか? – Maggie

+0

私には分かりません。もちろん、ファイルやストリームを開いている場合は、不要になったときに 'close() 'する必要があります。 – Caner