1. ホーム
  2. android

[解決済み] java.lang.OutOfMemoryError: ビットマップサイズがVMバジェットを超えています - Android

2022-04-25 12:41:50

質問

Androidで画像を多用するアプリケーションを開発しました。

アプリは一度実行され、画面上の情報を埋め尽くす( Layouts , Listviews , Textviews , ImageViews など)、ユーザーがその情報を読み取る。

アニメーションや特殊効果、メモリを埋めるようなものはありません。 時々、描画対象が変わることがあります。アンドロイドのリソースとSDCARDのフォルダに保存されたファイルがあります。

その後、ユーザーは終了します( onDestroy メソッドが実行され、アプリはVMによってメモリ上に残ります)そして、ある時点でユーザは再び入力します。

ユーザがアプリにアクセスするたびに、メモリがどんどん増えていき、やがてユーザが java.lang.OutOfMemoryError .

では、多くの画像を扱うには、どのような方法が最適/正しいのでしょうか?

常に読み込まれないように、静的メソッドに置くべきでしょうか? レイアウトやレイアウトで使用されている画像を特別な方法でクリーニングする必要があるのでしょうか?

どのように解決するのですか?

メモリリークしているようですね。問題は、多くの画像を処理することではなく、アクティビティが破棄されるときに画像が解放されないことです。

その理由は、あなたのコードを見なければなんとも言えません。しかし、この記事には役に立つかもしれないヒントがいくつかあります。

http://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html

特に、静的変数の使用は、事態を改善するのではなく、悪化させる可能性が高いです。アプリケーションの再描画時にコールバックを削除するコードを追加する必要があるかもしれません -- しかし、ここでも確かなことを述べるには十分な情報がありません。