Android Open Source - RecyclingImageLoader Image Memory Cache






From Project

Back to project page RecyclingImageLoader.

License

The source code is released under:

Apache License

If you think the Android project RecyclingImageLoader listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*******************************************************************************
 * Copyright 2013 hellosky ye/*from   w ww  . j av  a 2  s .  co  m*/
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package com.hellosky.recyclingimageloader.util;

import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.support.v4.util.LruCache;
import android.util.Log;

public class ImageMemoryCache {
  private static final String TAG = "MemoryCache";
  private LruCache<String, BitmapDrawable> mMemoryCache;
  private int limit = 10*1024;// default size

  public ImageMemoryCache() {
    setLimit(Math.round(0.15f * Runtime.getRuntime().maxMemory() / 1024));
    mMemoryCache = new LruCache<String, BitmapDrawable>(limit) {

      /**
       * Notify the removed entry that is no longer being cached
       */
      @Override
      protected void entryRemoved(boolean evicted, String key,
          BitmapDrawable oldValue, BitmapDrawable newValue) {
        if (RecyclingBitmapDrawable.class.isInstance(oldValue)) {
          // The removed entry is a recycling drawable, so notify it
          // that it has been removed from the memory cache
          ((RecyclingBitmapDrawable) oldValue).setIsCached(false);
        }
      }

      /**
       * Measure item size in kilobytes rather than units which is more
       * practical for a bitmap cache
       */
      @Override
      protected int sizeOf(String key, BitmapDrawable value) {
        final int bitmapSize = getBitmapSize(value) / 1024;
        return bitmapSize == 0 ? 1 : bitmapSize;
      }
    };
  }

  public void setLimit(int new_limit) {
    limit = new_limit;
  }

  public BitmapDrawable get(String id) {
    try {
      BitmapDrawable memValue = null;

      if (mMemoryCache != null) {
        memValue = mMemoryCache.get(id);
      }
      return memValue;
    } catch (NullPointerException ex) {
      return null;
    }
  }

  public void put(String id, BitmapDrawable value) {
    try {
      if (mMemoryCache != null) {
        if (RecyclingBitmapDrawable.class.isInstance(value)) {
          ((RecyclingBitmapDrawable) value).setIsCached(true);
        }
        mMemoryCache.put(id, value);
      }
    } catch (Throwable th) {
      th.printStackTrace();
    }
  }

  public void clear() {
    if (mMemoryCache != null) {
      mMemoryCache.evictAll();
    }
  }

  public static int getBitmapSize(BitmapDrawable value) {
    Bitmap bitmap = value.getBitmap();

    if (Utils.hasHoneycombMR1()) {
      return bitmap.getByteCount();
    }
    // Pre HC-MR1
    return bitmap.getRowBytes() * bitmap.getHeight();
  }
}




Java Source Code List

com.hellosky.recyclingimageloader.ImageDetailActivity.java
com.hellosky.recyclingimageloader.ImageDetailFragment.java
com.hellosky.recyclingimageloader.ImageGridActivity.java
com.hellosky.recyclingimageloader.ImageGridFragment.java
com.hellosky.recyclingimageloader.Images.java
com.hellosky.recyclingimageloader.SampleActivity.java
com.hellosky.recyclingimageloader.util.ImageFileCache.java
com.hellosky.recyclingimageloader.util.ImageLoader.java
com.hellosky.recyclingimageloader.util.ImageMemoryCache.java
com.hellosky.recyclingimageloader.util.RecyclingBitmapDrawable.java
com.hellosky.recyclingimageloader.util.Utils.java