android 内存缓冲机制:


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(安卓)自定义Ratingbar
  2. Android相关开发网站
  3. Android(安卓)WebView基本用法及常见问题
  4. android handle弱引用
  5. 【Xutils-框架 BitmapUtils】解析!!!!!!!!!!!!!!!!!!!!!!!!
  6. 图片 缓存
  7. 开源项目Universal Image Loader for Android(安卓)说明文档 (1)
  8. Android(安卓)自定义自由选择时间区间的日历控件
  9. Android内存溢出与优化(三)——使用完后要close、recycle、unregis

随机推荐

  1. App测试中ios和Android的区别
  2. android 两个应用之间的通信与调用
  3. Android第三方库
  4. Android(安卓)Intent调用方法总结
  5. android adapter详解
  6. 关于Android中四类核心组件的简介
  7. 学习笔记:Android(安卓)SQLite,并实现SQLit
  8. Android(安卓)6.0 (marshmallow)中新的新技
  9. 深入解析_Android的自定义布局
  10. Android中经常用到的方法--SDcard下文件