Android -- DiskLruCache

2658 ワード

DiskLruCache
  • ディスクキャッシュオブジェクトを作成する:
  • public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize);

    Open()メソッドは4つのパラメータを受信し、1つ目のパラメータはデータのキャッシュファイルアドレスであり、2つ目のパラメータは現在のアプリケーションのバージョン番号であり、3つ目のパラメータは同じkeyがどれだけのキャッシュファイルに対応できるかであり、一般的には伝1であり、4つ目のパラメータは最大何バイトまで保存できるデータである.
    //        ,  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;
    }

    まとめ
    以上がディスクキャッシュの作成と使用方法です.実際の操作では、メモリキャッシュとディスクキャッシュが組み合わされて使用されます.一般的には、ディスクキャッシュからデータが読み込まれていない場合は、メモリキャッシュからデータが読み込まれます.
    天王ゲジトラの分割線です