標籤:android記憶體管理 android緩衝管理 android檔案快取和記憶體緩衝
/** * @author [email protected] * @time 20140606 */ package com.intbird.utils;import java.io.File;import com.yilake.store.FileHelper;import android.graphics.Bitmap;import android.os.Environment;import android.util.LruCache;public class CacheManager {//單例private static CacheManager cacheInstance;//記憶體緩衝大小private final int MEMO_CACHE_SIZE=((int)(Runtime.getRuntime().maxMemory()/1024));//檔案快取大小private final int DISK_CACHE_SIZE=1024*1024*100;//記憶體緩衝private LruCache<String,Bitmap> mMemoryCache;//檔案快取private DiskLruCache mDiskLruCache;private String cacheUrl="";public CacheManager() {//記憶體緩衝mMemoryCache=new LruCache<String, Bitmap>(MEMO_CACHE_SIZE){protected int sizeOf(String key, Bitmap bitmap) {return bitmap.getByteCount()/1024;};};//檔案快取setBitmapFileCacheDir(FileHelper.DISK_CACHE_FILEDIR);}/** * 擷取單例 * @return */public static CacheManager getInstance() {if(cacheInstance==null){cacheInstance=new CacheManager();}return cacheInstance;}/** * 設定緩衝目錄; * @param cacheDir */public void setBitmapFileCacheDir(String cacheDir){File cacheFile=getDiskFileCache(cacheDir);cacheUrl=cacheFile.getAbsolutePath();mDiskLruCache=DiskLruCache.openCache(cacheFile, DISK_CACHE_SIZE);}/** * 返回緩衝目錄路徑 * @return */public String getBitmapFileCacheDir(){return cacheUrl;}//通用外部調用public void addBitmapToCache(String fileUrl, Bitmap bitmap) {addBitmapToMemory(fileUrl,bitmap);addBitmapToDisk(fileUrl,bitmap);}public Bitmap getBitmapFromCache(String key){Bitmap bmp=null;bmp=getBitmapFromMemory(key);if(bmp==null){bmp=getBitmapFromDisk(key);}return bmp;}/** * 圖片加入記憶體緩衝 * @param key * @param bitmap */private void addBitmapToMemory(String key,Bitmap bitmap){if(getBitmapFromMemory(key)==null){mMemoryCache.put(key, bitmap);}}/** * 擷取記憶體緩衝圖片 * @param key * @return */private Bitmap getBitmapFromMemory(String key){return mMemoryCache.get(key);}/** * 將圖片加入檔案快取 * @param key * @param bitmap */private void addBitmapToDisk(String key,Bitmap bitmap){ if (mDiskLruCache != null && mDiskLruCache.get(key) == null) { mDiskLruCache.put(key, bitmap); }}/** * 從檔案快取中擷取圖片 * @param key * @return */private Bitmap getBitmapFromDisk(String key){ if (mDiskLruCache != null) { return mDiskLruCache.get(key); } return null;}/** * 擷取緩衝目錄 * @return */public static File getDiskFileCache(String cacheDir){String cachePath =Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable() ? Environment.getExternalStorageDirectory().getPath(): Environment.getDataDirectory().getPath(); File file =new File(cachePath + File.separator + cacheDir); if(!file.exists()) file.mkdir(); return file;}}