5

まず最初に、関連する投稿がたくさんあることを知っています。それらの多くを読みましたが、どれも役に立たず、アイデアがありません:)

だから私は、たくさんの画像(ボタン、ロゴ、たくさんの画像を表示するなど)を使用するAndroidアプリ(SDKバージョン14+)を開発しています。平均画像サイズは 120kb +- 100kb

タイトルにあるように、OutOfMemory エラーが発生しています。最初に、xmlで、またはsetImageResourceを使用してプログラムでImageViewsに画像ソースを追加しました。OutOfMemory エラーにより、すぐにアプリがクラッシュし始めました。だから私はこの(http://developer.android.com/reference/android/util/LruCache.html)チュートリアルを読んで、それが言うようにLruCacheを実装しました。ビットマップを lrucache に追加し、get メソッドを使用してビットマップをイメージビューに設定しました。

アクティビティの onDestroy メソッドで、lrucache の evictAll メソッドを呼び出し、lrucache を null に設定します。したがって、メモリは解放されると思います。

ただし、問題は解決しません。いくつかのアクティビティを実行すると、アプリがクラッシュします。

助けていただければ幸いです:)

4

3 に答える 3

4

たくさん助けてくれてありがとう!

したがって、誰かが同じ問題を抱えてこの質問を閲覧している場合は、いくつかのガイドラインがあります。

  • ビットマップが不要になったら、ビットマップで .recycle() を呼び出します。
  • Eclipse Memory Analyzer を使用して問題を見つけてください
  • (必見)このビデオを見る
  • .hprofファイルからビットマップを表示する方法は次のとおりです。
于 2013-03-25T08:09:37.000 に答える
3

ドキュメントによると、使用可能な最大VMメモリを超えると、OutOfMemory例外がスローされます。ビットマップのキャッシュが使用可能な仮想メモリを超えているようです。

使用しないときはビットマップをリサイクルしてください。

 bitmap.recycle();

LRUCacheを使用してビットマップをリサイクルする必要があるのはいつですか?。コモンズウェアによって受け入れられた答えを見てください。

LRUCacheが画像を削除して別の画像用のスペースを確保する場合、メモリは解放されていないと思います(上記のリンクでユーザーからの質問)

ビットマップがリサイクルされるかガベージコレクションされるまで、そうはなりません(commomswareによる回答)。

http://www.youtube.com/watch?v=_CruQY55HOk。メモリ管理、メモリリーク、およびMATアナライザの使用について説明します。

于 2013-03-19T10:23:09.357 に答える
1

すべての画像をヒープに保存していますか? その場合、それらを SD カードまたは内部ストレージにキャッシュし、それらの束だけをヒープに保持する必要があります (LRU キャッシュを使用するのが良い方法です)。

既にこれを行っている場合は、メモリ アナライザー ツールをダウンロードして、アプリのメモリ使用量をデバッグできます。

http://www.eclipse.org/mat/

OutOfMemoryError を処理するのは非常に苦痛です。

幸運を!

于 2013-03-19T10:07:49.620 に答える