/var/log/messages

Jun 21, 2015 - 1 minute read - Comments - android

LruCache (2)

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

とは言え、ImageLoader.ImageCache は interface で

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

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

もう一つ

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

    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 もアプリ内で一つにしとけ的エントリ確認。確かにそりゃそうですね。。

昼呑み MaterialDesign

comments powered by Disqus