当前位置: 代码迷 >> Android >> Android - DiskLruCache
  详细解决方案

Android - DiskLruCache

热度:111   发布时间:2016-04-27 23:56:22.0
Android -- DiskLruCache

DiskLruCache

  • 创建一个磁盘缓存对象:
public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize);

open()方法接收四个参数,第一个参数是数据的缓存文件地址,第二个参数是当前应用程序的版本号,第三个参数是同一个key可以对应多少个缓存文件,一般都是传1,第四个参数是最多可以缓存多少字节的数据。

//创建磁盘缓存文件,首选sdcard,如果sdcard没有挂载或者没有sdcard则获取应用默认的cache目录public static File getDiskCacheDir(Context context, String uniqueName) {    // Check if media is mounted or storage is built-in, if so, try and use external cache dir    // otherwise use internal cache dir    final String cachePath =            Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||                    !isExternalStorageRemovable() ? getExternalCacheDir(context).getPath() :                            context.getCacheDir().getPath();     return new File(cachePath + File.separator + uniqueName);}
  • 获取软件版本号
public int getAppVersion(Context context) {		try {			PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);			return packageInfo.versionCode;		} catch (NameNotFoundException e) {			e.printStackTrace();		}		return 1;	}
JavaDiskLruCache mDiskLruCache = null;try {	File cacheDir = getDiskCacheDir(context, "thumbnails");	if (!cacheDir.exists()) {		cacheDir.mkdirs();	}	mDiskLruCache = DiskLruCache.open(cacheDir, getAppVersion(context), 1, 10 * 1024 * 1024);} catch (IOException e) {	e.printStackTrace();}
  • 磁盘缓存
//添加缓存public void addBitmapToCache(String key, Bitmap bitmap) {    // Add to memory cache as before,把缓存放到内存缓存中    if (getBitmapFromMemCache(key) == null) {        mMemoryCache.put(key, bitmap);    }     // Also add to disk cache,把缓存放入磁盘缓存    synchronized (mDiskCacheLock) {        if (mDiskLruCache != null && mDiskLruCache.get(key) == null) {            mDiskLruCache.put(key, bitmap);        }    }}//获取缓存public Bitmap getBitmapFromDiskCache(String key) {    synchronized (mDiskCacheLock) {        // Wait while disk cache is started from background thread        while (mDiskCacheStarting) {            try {                mDiskCacheLock.wait();            } catch (InterruptedException e) {}        }        if (mDiskLruCache != null) {            return mDiskLruCache.get(key);        }    }    return null;}

总结

以上是磁盘缓存的创建和使用方法。在实际操作中内存缓存和磁盘缓存是配合起来使用的,一般先从内存缓存中读取数据,如果没有再从磁盘缓存中读取。

我是天王盖地虎的分割线

  相关解决方案