0

私はOOMを手に入れました。私はそれが以前の質問でたくさんカバーされたことを知っています、しかし私のものは一般的にAndroidとJavaの内部と関係があります。

ランダムなポイントで画像を読み込んでいると、この恐ろしいOOM例外が発生します。

HashMap>に画像があります。SoftReferencesの定義から、メモリが十分でない場合はDrawablesがGCされると思います。

対照的に、以前の調査から、ドローアブルのビットマップは、アプリケーションヒープとは異なるヒープ(ネイティブヒープ)に割り当てられていることがわかりました。これが、DDMSで6MBのメモリを使用しているにもかかわらず、アプリがクラッシュする理由を説明しています。

また、SoftReferencesはキャッシュに「最適」であり、Androidエンジニアが使用することを推奨しているようです。

私の質問は、私のアプリケーションヒープがMAXポイントに到達することはないので、これは私のSoftReferencesがGCされないことを意味するはずです。

この問題を解決するにはどうすればよいですか?それでは、SoftReferencesを使用することで本当にメリットはありますか?私は何かを正しく理解していませんか?

ありがとう!

4

2 に答える 2

0

recycle()この方法を使ってみましたか?これにより、ビットマップが役に立たなくなるため、ガベージコレクターがその役割を果たします。

于 2013-01-29T16:29:25.393 に答える
0

同じ問題が発生し、SoftReference HashMapを使用しましたが、それでもOOMエラーが発生しました。BitmapFactory.decodeStreamは画像をデコードするために大量のメモリを必要とするため、私がそれを取り除くことができた唯一の方法は、大きな画像を使用しないことでした。

于 2011-04-27T18:52:06.997 に答える