0

重複の可能性:
OutOfMemoryError: ビットマップ サイズが VM の予算を超えています:- Android

この問題を上下に調査しましたが、特定の問題については何も見つかりません。ボタンの背景には、drawable フォルダーにある .PNG ファイルを使用します。ボタンは大きく (約 150p x 150p)、見栄えを良くするために画像とグラデーションを使用します。個々の .xml ファイルで定義されているように、ボタンを押すと背景が変わります。私がグーグルで見つけた解決策は、レイアウトで指定された画像ではなく、プログラムで呼び出された画像用のようです。さまざまなレイアウトとさまざまなボタンを使用してさまざまなアクティビティを頻繁に終了して開始すると、最終的にメモリ不足エラーが発生します

04-27 22:18:46.227: E/dalvikvm-heap(512): 396900 バイトの外部割り当てがこのプロセスには大きすぎます。

04-27 22:18:46.427: E/AndroidRuntime(512): 原因: java.lang.OutOfMemoryError: ビットマップ サイズが VM の予算を超えています

私の質問は、画像がレイアウトで指定されていて、プログラムで追加されていない場合、どのようにメモリを割り当てるのですか?

4

4 に答える 4

2

ビットマップを効率的に表示する方法に従ってください http://developer.android.com/training/displaying-bitmaps/index.html

于 2012-04-28T02:20:41.987 に答える
1

アプリ内を移動するときに同じアクティビティの複数のインスタンスが作成されている場合、これが問題を引き起こしている可能性があります。この問題を修正するには、SINGLE_TOP または SINGLE_TASK フラグを使用します。ただし、SINGLE_TOP の機能に関して Android にバグがあるように見えることに注意してください。アクティビティを SINLGE_TOP として宣言し、SINLGE_TOP フラグを使用してアクティビティを起動する必要があります。ドキュメントは次のとおりです。http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

于 2012-04-28T01:11:20.037 に答える
1

以下は、メモリを消費している原因を特定するのに役立ちます。

UncaughtExceptionHandlerを追加し、OOM 例外を取得したときにヒープをダンプします。Debug.dumpHprofData()を使用してヒープをダンプします。この後、 hprof-convでファイルを変換し、Eclipse Memory Analyzerを使用して結果のファイルを確認します。

UncaughtExceptionHandler でラップされた例外に注意してください。OOM 例外が RuntimeException にラップされている場合があります。

于 2012-04-27T23:06:59.857 に答える
0

すぐにクラッシュしますか、それともしばらくするとクラッシュしますか?大きな画像であっても、いくつかの画像でアプリがクラッシュすることはありません。私は過去に、アプリがポップになるまで多くの回転がメモリをリークすることを発見しました。実際、OOMの問題が最も多いのはここです。同じ問題が発生する場合は、コンテキスト、ディレクトリへのポインタを保持するか、ビューへのポインタを保持するためです。

于 2012-04-27T22:47:32.593 に答える