Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android自帶的內存memory和第三方外部存儲disk管理

android自帶的內存memory和第三方外部存儲disk管理

編輯:關於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 mMemoryCache;
	//文件緩存
	private DiskLruCache mDiskLruCache;
	private String cacheUrl="";
	
	public CacheManager() {
		//內存緩存
		mMemoryCache=new LruCache(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;
	}
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved