xml で ImageView に画像を読み込むと、より多くのメモリが必要ですか?
約7つの画像ビューを持つアクティビティがあります(Android携帯のアプリトレイと同じです)。
xml の各イメージビューのイメージを読み込んでいます。これにより OutOfMemoryError が発生しますか?
これらをリサイクルする方法はありますか?
xml で ImageView に画像を読み込むと、より多くのメモリが必要ですか?
約7つの画像ビューを持つアクティビティがあります(Android携帯のアプリトレイと同じです)。
xml の各イメージビューのイメージを読み込んでいます。これにより OutOfMemoryError が発生しますか?
これらをリサイクルする方法はありますか?
drawable
はい、画像を添付することは可能で、ImageView
必要に応じて削除することができます。
imageview.setBackgroundResource(R.drawable.image);
or
imageview.setImageDrawable(drawable);
メモリ不足の問題は発生しません。ドキュメントへのリンク
Android のメモリの問題に対処するためのいくつかのヒント:
1)。ローカル変数を使用して大きなデータ/ビットマップを特にループに格納しないでください。不要なオブジェクトが作成されるためです。このような状況では、クラス/インスタンス変数を好みます。必要でない限り、データを保持しないようにしてください。
2)。可能な限り View.findViewById(..) の呼び出しを行わないようにします。Romain Guy は、Google I/O 2010で、このメソッドはコストがかかる (実行に数 KB のメモリを必要とする) ことを明確に述べているため、ViewHolder を使用するのと同じように、このメソッドをスマートに呼び出すと、メモリの消費量が少なくなります。
3) String プールを効果的に使用し、文字列の重い操作を行う場合は StringBuilder/StringBuffer を使用します。StringBuffer は同期され、StringBuilder と比較してコストがかかるため、いつ StringBuffer を使用する必要があるかを認識しておいてください。
画像をロードしているときにこの問題が発生しました。このエラーは、Android エミュレーターでのみ表示される場合があり、モバイル デバイスでもアプリがクラッシュする場合があります。
次の2つの手順でこの問題を解決しました。
解像度が高すぎる場合は、画像のサイズを変更します。
同時に開いている画像オブジェクトが多すぎない。
イメージ オブジェクトが不要になったときに NULL を割り当てることで、ガベージ コレクターを助けることもできます。
必要でない限り、同時にあまりにも多くの画像を開かないようにします。
サイズを変更する必要がある要因は、画像の実際のサイズによって異なります。