• 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;
    	}
    
    Java
    
    DiskLruCache 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;
    }
    

    总结

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

    我是天王盖地虎的分割线

  • 相关阅读:
    linux MySQL 初始化数据库
    linux 建立 MySQL 账号
    linux MySQL 安装
    Background-Size
    .net文件压缩和解压及中文文件夹名称乱码问题
    C# 浅拷贝与深拷贝区别
    移动端手势库hammerJS 2.0.4官方文档翻译
    期待已久的2012年度最佳jQuery插件揭晓
    Hammer.js
    jQuery Validate验证框架详解
  • 原文地址:https://www.cnblogs.com/yydcdut/p/4660669.html
Copyright © 2020-2023  润新知