1. ホーム
  2. Android

android ImageViewの割り当て問題 setImageResourceとsetImageBitmap

2022-02-17 02:35:29
<パス

1.



要件に応じて、最初のものは簡単ですが、それはスペースを占有し、リソースが時間内にリサイクルされません、画像はoutofmemoryエラーから簡単に多くの、大規模な実行であり、2番目は手動で設定することがより面倒ですが、それは安全である

2. 2.を使用した方が良い



最初のsetImageResourceは、リソースIDでdrawableされたリソースからファイルを探してdrawableオブジェクトに描画するものです。この方法は、自動的に解像度に適応します。画像リソースが大きすぎないため、設定頻度が低い場合に適しています。しかし、大きな画像や、繰り返し画像を設定する必要がある場合、このメソッドを呼んで生成されたdrawableは、ビットマップファクトリーによってビットマップが生成され、その一部がCライブラリを呼び出す必要があるため、ネイティブのローカルメモリ空間の一部とjvmのメモリ空間の一部を開放する必要があり、ビットマップオブジェクトを生成することになります。ネイティブのメモリ空間はCによって開放されますが、jvmのgcガベージコレクタはこの部分の空間をリサイクルできないので、頻繁にsetImageResourceを呼んで、手動でリサイクルを呼ばないと、ネイティブメモリ空間は解放されにくく、jvmのメモリはリサイクルが間に合わないので、メモリオーバーフローがかなり簡単に発生します。



setImageBitmapは、大きな画像を頻繁に設定する必要がある場合、bitmapfactoryを通じてビットマップを生成してから設定し、毎回設定前に前のビットマップのリサイクルを手動で落として、リサイクル可能な状態にします。これにより、メモリリークやオーバーフローを大きく防ぐことができます。



したがって、あなたのニーズに応じて、あなたの画像が頻繁に設定され、あまり大きくない場合は、最初のものを使用してください。何度も設定を更新する必要がある場合は、2番目のものを使用し、それを設定する前に手動でリサイクルすることを忘れないでください。

3. setImageResource(id) デバイスの解像度に画像サイズを合わせる。



setImageBitmap(BitmapFactory.decodeResource(res,id)) サイズは手動で調整する必要があります。



サイズを手動で設定することで、メモリのオーバーフローを防ぐことができます!

概要を説明します。



setImageResource(id): シンプルだが、メモリを消費する。



setImageBitmap(BitmapFactory.decodeResource(res,id)): 比較的面倒だが、メモリのオーバーフローを防ぐことができる。

から引用しています。



http://bbs.eoe.cn/thread-327898-1-1.html