0

私は Android アプリを作成していますが、今までメモリ不足になったことはありません。混乱を招く部分は、メモリ不足になると予想される方法ではなかったことです。

新しい Linear Layout をレイアウト xml ファイルに追加しただけです。40kb の大きさの画像の背景がありました。ロードされた他の画像は約 12kb で、背景は 120kb とはるかに大きくなっています。このイメージがロードされると、実行時に Fatal Signal 11 を受け取ります。レイアウトから背景を削除すると、うまく機能します。次に、画像をはるかに小さく変更しました。以前は (2000x600) だったので、現在は 14kb です。今では正常に動作します。余分な 26kb が問題を引き起こしていることは明らかです...

このようなことが二度と起こらないようにするには、どのような予防策を講じるべきですか。もちろん、高品質の画像が必要で、2000x600 は電話用のアプリなので過剰かもしれませんが、どのガイドラインに従う必要がありますか?

拡張できるメモリ使用量の上限はありますか? また、スクロールビューに多くの画像をロードすると、アプリがクラッシュしますか? 一度に多くの画像をロードしましたが、クラッシュしたことは一度もありません。メモリ使用量が非常に少ないためにエラーが発生したことに混乱しています。(少なくとも今日の用語では。)

よろしく、

ジェイク

4

1 に答える 1

0

イメージは、ディスク上と同じ量のメモリを RAM で消費しません。RAM の使用量は、次の方法で取得できます。

width*height*4 (for images with an alpha channel)

width*height*3 (for images without an alpha channel)

Android アプリには、特定のデバイスとそのデバイスの ROM バージョンで常に同じになる一定量のヒープ スペースが RAM に割り当てられます。最小値は 16 MB ですが、最近のほとんどのデバイスでは、より快適な 32 MB または 64 MB が提供されます。それは本当にデバイスに依存します。

Out of Memory Exceptionsアプリがこのヒープ領域を超えると (OOM) を取得します。簡単な修正方法は次のとおりです。このヒープ領域を超えないようにします。

アプリで高品質の画像を取得する最善の方法は、密度バケットを使用して、Android が選択できるさまざまなサイズを提供することです。いずれにせよ、LDPI 画面は高解像度の画像を利用できないため、LDPI では低解像度のみを提供する必要があります。一方、HDPI デバイスはより優れた解像度を利用でき、1 つの Android を提供すればそれを使用できます。デバイスの解像度が高いほど、アプリの実行に割り当てられるヒープ スペースが増えることはほぼ当然のことです。

メモリを管理するもう 1 つの方法は、遅延読み込みを実装して、必要なものだけを読み込むことです。これは、リストビューとスクロールビュー、およびその他のアダプタ ベースのビュー システムで特に役立ちます。

Android 3.0 以降では、 を使用してより大きなヒープをリクエストできますandroid:largeHeap="true"。ただし、アプリが起動されるたびに他のアプリがメモリから削除されていることにユーザーが気付くため、これは避ける必要があります。また、どのような場合でも、より大きなヒープを受け取ることが保証されているわけではありません。

于 2013-08-18T21:32:26.713 に答える