ImageView にセットした Bitmap はどうなるのか(1)

Android で画像を扱うと、すぐに OutOfMemoryError にお目にかかる。基本的には、Bitmap を使い終わったら recycle() することで回避できるのだが(Android 2.x 系では、Bitmap は native な領域に確保されているため、gc で自動的に回収されない)、ファイルから読み込んだ画像は immutable なオブジェクトになるので、Bitmap をコピーしなければならず、そこで落ちたりしてなかなかやっかいだ。

Bitmap の利用時に発生する OutOfMemoryError の回避方法は興味深いのだが、たくさんの記事があるので後回しにして、何回かに渡って ImageView を調べてみようと思う。ImageView には、setImageBitmap(Bitmap bm)というメソッドが用意されており、Bitmap をセットして描画できる。Bitmap なので、当然 recycle()を呼び出さなければならないが、呼び出すタイミングが難しい。できれば、ImageView が処理してくれるとうれしいのだが・・・

まずは、API のドキュメントを調べてみた。

Sets a Bitmap as the content of this ImageView.

Parameters
bm The bitmap to set

Simple is best. Bitmap がどうなるのかなんて、全く説明がない。仕方がないので、ソースコードを読む。今回は、grepcode.comで4.2.2_r1のコードを見てみた。

     @android.view.RemotableViewMethod
     public void setImageBitmap(Bitmap bm) {
         setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
     }

セットした Bitmap に何かしている様子はない・・・ですね。ImageView にセットした Bitmap を自分で recycle() しないといけないとすると、ちょっと不便すぎるので、次回は Bitmap を自分で recycle() しなかったらメモリーリークするのかどうか調べてみることにする。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.