Android Open Source - xda-feed-reader Memory Cache






From Project

Back to project page xda-feed-reader.

License

The source code is released under:

GNU General Public License

If you think the Android project xda-feed-reader 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

package com.iven.xdafeedreader.imageparserutils;
//from  w  ww.j a va  2  s .com
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import android.graphics.Bitmap;
import android.util.Log;

public class MemoryCache {

  private static final String TAG = "MemoryCache";
  private Map<String, Bitmap> cache = Collections
      .synchronizedMap(new LinkedHashMap<String, Bitmap>(10, 1.5f, true));
  private long size = 0;// current allocated size
  private long limit = 1000000;// max memory in bytes

  public MemoryCache() {
    setLimit(Runtime.getRuntime().maxMemory() / 4);
  }

  public void setLimit(long new_limit) {
    limit = new_limit;
    Log.i(TAG, "MemoryCache will use up to " + limit / 1024. / 1024. + "MB");
  }

  public Bitmap get(String id) {
    try {
      if (!cache.containsKey(id))
        return null;
      
      return cache.get(id);
    } catch (NullPointerException ex) {
      ex.printStackTrace();
      return null;
    }
  }

  public void put(String id, Bitmap bitmap) {
    try {
      if (cache.containsKey(id))
        size -= getSizeInBytes(cache.get(id));
      cache.put(id, bitmap);
      size += getSizeInBytes(bitmap);
      checkSize();
    } catch (Throwable th) {
      th.printStackTrace();
    }
  }

  private void checkSize() {
    Log.i(TAG, "cache size=" + size + " length=" + cache.size());
    if (size > limit) {
      Iterator<Entry<String, Bitmap>> iter = cache.entrySet().iterator();
      while (iter.hasNext()) {
        Entry<String, Bitmap> entry = iter.next();
        size -= getSizeInBytes(entry.getValue());
        iter.remove();
        if (size <= limit)
          break;
      }
      Log.i(TAG, "Clean cache. New size " + cache.size());
    }
  }

  public void clear() {
    try {
      
      cache.clear();
      size = 0;
    } catch (NullPointerException ex) {
      ex.printStackTrace();
    }
  }

  long getSizeInBytes(Bitmap bitmap) {
    if (bitmap == null)
      return 0;
    return bitmap.getRowBytes() * bitmap.getHeight();
  }
}




Java Source Code List

com.iven.xdafeedreader.domparser.DOMParser.java
com.iven.xdafeedreader.domparser.RSSFeed.java
com.iven.xdafeedreader.domparser.RSSItem.java
com.iven.xdafeedreader.imageparserutils.FileCache.java
com.iven.xdafeedreader.imageparserutils.ImageLoader.java
com.iven.xdafeedreader.imageparserutils.MemoryCache.java
com.iven.xdafeedreader.imageparserutils.Utils.java
com.iven.xdafeedreader.infoact.InfoActivity.java
com.iven.xdafeedreader.mainact.ArticleActivity.java
com.iven.xdafeedreader.mainact.ArticleFragment.java
com.iven.xdafeedreader.mainact.ListActivity.java
com.iven.xdafeedreader.mainact.SplashActivity.java