import java.lang.ref.SoftReference;import java.util.LinkedHashMap;import android.graphics.Bitmap;import android.util.Log;import android.util.LruCache;/** * @ClassName: MemoryCache * @date 2014-6-11 下午05:30:25 * @Description: idea:1,two memory cache 2,file cache 3,network get * @old modify: * @new modify: * @Version: */public class MemoryCache {// 1,two memory cache 2,file cache 3,network getpublic static final String TAG = "memory";// hard cache memory sizeprivate final static int HARD_MEMORY_SIZE = 8 * 1024 * 1024;// 8m// sofe cache numprivate final static int SOFT_CACHE_CAPACITY = 6;// hard cacheprivate final static LruCache<String, Object> mHardBitmapCache = new LruCache<String, Object>(HARD_MEMORY_SIZE) {@Overridepublic int sizeOf(String key, Object value) {return ((Bitmap) value).getRowBytes() * ((Bitmap) value).getHeight();// return 0;//not recycle memory}@Overrideprotected void entryRemoved(boolean evicted, String key,Object oldValue, Object newValue) {Log.v(TAG, "*********hard cache is full , push to soft cache*************");// 硬引用缓存区满,将一个最不经常使用的oldvalue推入到软引用缓存区mSoftBitmapCache.put(key, new SoftReference<Object>(oldValue));}};@SuppressWarnings("serial")private final static LinkedHashMap<String, SoftReference<Object>> mSoftBitmapCache = new LinkedHashMap<String, SoftReference<Object>>(SOFT_CACHE_CAPACITY, 0.75f, true) {@Overridepublic SoftReference<Object> put(String key, SoftReference<Object> value) {Log.v(TAG, "*******SoftReference******get put bitmap******");return super.put(key, value);}@Overrideprotected boolean removeEldestEntry(Entry<String, SoftReference<Object>> eldest) {if (size() > SOFT_CACHE_CAPACITY) {Log.v(TAG, "Soft Reference  limit , purge one");return true;}return false;}};// 缓存bitmappublic static boolean putBitmapInCache(String key, Object bitmap) {if (bitmap != null) {synchronized (mHardBitmapCache) {Log.v(TAG, "putBitmapInCache...HardBitmapCache.size->" + mHardBitmapCache.size() + " key:" + key);mHardBitmapCache.put(key, bitmap);}return true;}return false;}// 从缓存中获取bitmappublic static Bitmap getBitmapFromCache(String key) {Bitmap bitmap = null;synchronized (mHardBitmapCache) {bitmap = (Bitmap) mHardBitmapCache.get(key);if (bitmap != null) {Log.v(TAG, "getBitmapFrom  Hard  Cache.............key:" + key);return bitmap;}}// 硬引用缓存区间中读取失败,从软引用缓存区间读取synchronized (mSoftBitmapCache) {SoftReference<Object> bitmapReference = mSoftBitmapCache.get(key);if (bitmapReference != null) {bitmap = (Bitmap) bitmapReference.get();if (bitmap != null) {Log.v(TAG, "getBitmapFrom  Soft Cache..........key:" + key);return bitmap;} else {Log.v(TAG, "soft reference is recycle...");mSoftBitmapCache.remove(key);}}}return bitmap;};public static void freeMemory() {Log.v(TAG, "freeMemory.............");mHardBitmapCache.evictAll();mSoftBitmapCache.clear();// Clear the cache, calling entryRemoved(boolean, K, V, V) on each// removed entry.}}

更多相关文章

  1. Android(安卓)开发之JNI学习笔记
  2. Android(安卓)OkHttp 源码解析 - 拦截器
  3. 读取Android设备的MAC地址
  4. android URL获取图片显示到ImageView 控件上
  5. Android(安卓)vlc 简单使用
  6. 【Android(安卓)内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 |
  7. Android之SharedPreferences详解与原理分析
  8. android 使用私有maven仓库发布、打包、引用
  9. FregServer进程,发送BC_TRANSACTION,唤醒ServiceManager进程,返回BR

随机推荐

  1. android简单Logo
  2. android 自定义加减按钮
  3. android 动态壁纸 2
  4. spring android 编译环境搭建
  5. android 动画
  6. android studio生成apk直接改名字
  7. Eclipse Indigo - Cannot install Androi
  8. android 添加 iconv 支持
  9. android中Textview如何限制在一行显示且
  10. Android强制让某个控件获得焦点