/var/log/messages

debugging with sixth sense

LruCache (2)

というかひとまづ ImageLoader に渡す ImageLoader.ImageCache について確認した方が良さげ。

とは言え、ImageLoader.ImageCache は interface で

  • Bitmap getBitmap(String url)
  • void putBitmap(String url, Bitmap bitmap)

を実装すれば良いらしい。上記のメソドを使って ImageLoader がよしなに処理をしてくれるのか。その格納元として LruCache を使ってさしあげれば良いのですね。

もう一つ

ImageLoader.ImageCache の内部で使う LurCache なオブジェクトですが、確保時の作法としては

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private LruCache<String, Bitmap> mCache;

public BitmapCache() {
    final int memClass = ((ActivityManager)getSystemService(Context.ACTIVITY_SERVICE)).
        getMemoryClass();  
    final int cacheSize = 1024 * 1024 * memClass / 8;

    mCache = new LruCache<String, Bitmap>(cacheSize) {
        @Override
        protected int sizeOf(String key, Bitmap value) {
            return value.getRowBytes() * value.getHeight();
        }
    };

}

per-application memory class of the current device とのこと。また、単位は megabites ということで heap 全体の 1/8 で単位を MB にして cacheSize に格納してます。そしてこのサイズで LruCache なオブジェクトを作っているのですね。

あとはきちんと sizeOf メソドを override しているのも肝要です。

備忘

ImageLoader もアプリ内で一つにしとけ的エントリ確認。確かにそりゃそうですね。。

Comments