Android -- DiskLruCache
2658 ワード
DiskLruCache ディスクキャッシュオブジェクトを作成する:
Open()メソッドは4つのパラメータを受信し、1つ目のパラメータはデータのキャッシュファイルアドレスであり、2つ目のパラメータは現在のアプリケーションのバージョン番号であり、3つ目のパラメータは同じkeyがどれだけのキャッシュファイルに対応できるかであり、一般的には伝1であり、4つ目のパラメータは最大何バイトまで保存できるデータである.ソフトウェアバージョン番号 を取得ディスクキャッシュ
まとめ
以上がディスクキャッシュの作成と使用方法です.実際の操作では、メモリキャッシュとディスクキャッシュが組み合わされて使用されます.一般的には、ディスクキャッシュからデータが読み込まれていない場合は、メモリキャッシュからデータが読み込まれます.
天王ゲジトラの分割線です
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;
}
まとめ
以上がディスクキャッシュの作成と使用方法です.実際の操作では、メモリキャッシュとディスクキャッシュが組み合わされて使用されます.一般的には、ディスクキャッシュからデータが読み込まれていない場合は、メモリキャッシュからデータが読み込まれます.
天王ゲジトラの分割線です