/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 全体の 18 で単位を MB にして cacheSize に格納してます。そしてこのサイズで LruCache なオブジェクトを作っているのですね。

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

備忘

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

昼呑み MaterialDesign

comments powered by Disqus